From 894b48758e36d5cefc29f1a997c30e60d1e40726 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 17 Jul 2026 16:45:22 -0600 Subject: [PATCH 01/25] Add Guides section --- _data/display_as.yml | 3 ++ _data/display_as_py_r_js.yml | 3 ++ _includes/layouts/side-bar.html | 3 ++ _includes/posts/documentation_eg.html | 26 ++++++++++++++ .../posts/mainlang_documentation_eg.html | 35 +++++++++++++++++++ .../2026-07-17-plotly_js-guides-index.html | 25 +++++++++++++ 6 files changed, 95 insertions(+) create mode 100644 _posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html diff --git a/_data/display_as.yml b/_data/display_as.yml index 74d89ff02..4a557b5ca 100644 --- a/_data/display_as.yml +++ b/_data/display_as.yml @@ -13,6 +13,9 @@ signal-analysis: file_settings: reference: '#fundamentals' text: Fundamentals +guide: + reference: '#guides' + text: Guides basic: reference: '#basic-charts' text: Basic diff --git a/_data/display_as_py_r_js.yml b/_data/display_as_py_r_js.yml index d01a415a9..f9fae4381 100644 --- a/_data/display_as_py_r_js.yml +++ b/_data/display_as_py_r_js.yml @@ -13,6 +13,9 @@ signal-analysis: file_settings: reference: 'plotly-fundamentals' text: Fundamentals +guide: + reference: 'guides' + text: Guides basic: reference: 'basic-charts' text: Basic Charts diff --git a/_includes/layouts/side-bar.html b/_includes/layouts/side-bar.html index 2270db9c3..5d4a74dcf 100644 --- a/_includes/layouts/side-bar.html +++ b/_includes/layouts/side-bar.html @@ -157,6 +157,9 @@ Configuration Options +
  • + Guides +
  • {% endif %} diff --git a/_includes/posts/documentation_eg.html b/_includes/posts/documentation_eg.html index 7a831ae1e..9585d9887 100644 --- a/_includes/posts/documentation_eg.html +++ b/_includes/posts/documentation_eg.html @@ -8,6 +8,8 @@ {%- for page in languagelist -%} {% if page.display_as == "file_settings" %} {% assign file_settings = true %} +{% elsif page.display_as == "guide" %} +{% assign guide = true %} {% elsif page.display_as == "chart_type" or page.display_as == "basic" %} {% assign chart_type = true %} {% elsif page.display_as == "statistical" %} @@ -115,6 +117,30 @@ {% endif %} +{% if guide %} +
    +
    + + {% if show_header %} + Guides + {% endif %} + +
    +
    +
      + {%- for page in languagelist -%} + {% if page.display_as == "guide" %} + + {% include layouts/grid-item.html %} + + + {% endif %} + {%- endfor -%} +
    +
    +
    +{% endif %} + {% if ai_ml %}
    diff --git a/_includes/posts/mainlang_documentation_eg.html b/_includes/posts/mainlang_documentation_eg.html index 0443c98b7..42ad305e3 100644 --- a/_includes/posts/mainlang_documentation_eg.html +++ b/_includes/posts/mainlang_documentation_eg.html @@ -11,6 +11,8 @@ {% if page.layout != "langindex" %} {% if page.display_as == "file_settings" %} {% assign file_settings = true %} + {% elsif page.display_as == "guide" %} + {% assign guide = true %} {% elsif page.display_as == "chart_type" or page.display_as == "basic" %} {% assign chart_type = true %} {% elsif page.display_as == "statistical" %} @@ -88,6 +90,39 @@
    {% endif %} +{% if guide %} +
    +
    + Guides + + {% assign forloop_idx = 0 %} + {%- for page in languagelist -%} + {% if page.display_as == "guide" and page.layout != "langindex" %} + {% assign forloop_idx = forloop_idx | plus:1 %} + {% endif %} + {%- endfor -%} + + {% if forloop_idx >= num_examples %} + More Guides » + {% endif %} +
    +
    +
      + + {% assign forloop_idx = 0 %} + + {%- for page in languagelist -%} + {% if page.display_as == "guide" and page.layout != "langindex" and forloop_idx < num_examples %} + {% assign forloop_idx = forloop_idx | plus:1 %} + {% include layouts/grid-item.html %} + {% endif %} + {%- endfor -%} + +
    +
    +
    +{% endif %} + diff --git a/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html b/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html new file mode 100644 index 000000000..c6611aab2 --- /dev/null +++ b/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html @@ -0,0 +1,25 @@ +--- +permalink: javascript/guides/ +description: Guides for Plotly.js, including migration guides between major versions with breaking changes and before/after examples. +name: Guides +layout: langindex +display_as: guide +language: plotly_js +thumbnail: thumbnail/mixed.jpg +--- + + +
    +
    +
    +
    +

    Plotly.js Guides

    +

    {{page.description}}

    + {% include layouts/dashplug.html %} +
    +
    +
    +
    + + {% assign languagelist = site.posts | where:"language","plotly_js" | where:"display_as","guide" | where: "layout","base" | sort: "order" %} + {% include posts/documentation_eg.html %} From fcba9e35da0b0e92fe703300d262fa55b862b586 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 17 Jul 2026 16:36:48 -0600 Subject: [PATCH 02/25] Move v3 migration guide --- .../migrating-to-v3/2024-10-09-migrating-to-v3.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/plotly_js/{fundamentals/plotly-js-3-changes/2024-10-09-plotly-js-3-changes.md => guides/migrating-to-v3/2024-10-09-migrating-to-v3.md} (100%) diff --git a/_posts/plotly_js/fundamentals/plotly-js-3-changes/2024-10-09-plotly-js-3-changes.md b/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md similarity index 100% rename from _posts/plotly_js/fundamentals/plotly-js-3-changes/2024-10-09-plotly-js-3-changes.md rename to _posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md From 696dabd8490d360e8178007093d867b52271b67a Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 17 Jul 2026 16:46:33 -0600 Subject: [PATCH 03/25] Update v3 migration guide frontmatter --- .../migrating-to-v3/2024-10-09-migrating-to-v3.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md b/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md index dabc03d0c..a24704e16 100644 --- a/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md +++ b/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md @@ -1,13 +1,16 @@ --- description: Learn about the changes in Plotly.js version 3. -display_as: file_settings +display_as: guide language: plotly_js layout: base -name: Version 3 Changes -order: 27 +name: Migrating to Plotly.js v3 +order: 2 page_type: u-guide -permalink: javascript/version-3-changes/ -redirect_from: javascript/pointcloud/ +permalink: javascript/guides/migrating-to-v3/ +redirect_from: +- javascript/pointcloud/ +- javascript/version-3-changes/ +- javascript/migrating-to-v3/ sitemap: false thumbnail: thumbnail/pointcloud.jpg --- @@ -359,4 +362,4 @@ var data = [{ cmin: 0, cmax: 100 }]; -``` \ No newline at end of file +``` From 56ecb4700ed7130062fd6f1085f96ad7c034aa5f Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 17 Jul 2026 17:06:58 -0600 Subject: [PATCH 04/25] Add v4 migration guide --- .../2026-07-17-migrating-to-v4.md | 959 ++++++++++++++++++ .../migration_antimeridian_v3.png | Bin 0 -> 84216 bytes .../migration_antimeridian_v4.png | Bin 0 -> 81653 bytes .../migration_geo_autofit_v3.png | Bin 0 -> 98871 bytes .../migration_geo_autofit_v4.png | Bin 0 -> 87755 bytes .../migration_map_autofit_v3.png | Bin 0 -> 89209 bytes .../migration_map_autofit_v4.png | Bin 0 -> 48538 bytes .../migrating-to-v4/migration_sankey_v3.png | Bin 0 -> 69800 bytes .../migrating-to-v4/migration_sankey_v4.png | Bin 0 -> 68596 bytes .../migration_scattermap_iconcolor_v3.png | Bin 0 -> 59214 bytes .../migration_scattermap_iconcolor_v4.png | Bin 0 -> 56442 bytes .../migration_scattermap_legendsymbol_v3.png | Bin 0 -> 62430 bytes .../migration_scattermap_legendsymbol_v4.png | Bin 0 -> 58887 bytes .../migration_shape_legend_swatch_v3.png | Bin 0 -> 29802 bytes .../migration_shape_legend_swatch_v4.png | Bin 0 -> 29948 bytes .../migrating-to-v4/migration_tickmode_v3.png | Bin 0 -> 37078 bytes .../migrating-to-v4/migration_tickmode_v4.png | Bin 0 -> 35021 bytes 17 files changed, 959 insertions(+) create mode 100644 _posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md create mode 100644 all_static/images/migrating-to-v4/migration_antimeridian_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_antimeridian_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_geo_autofit_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_geo_autofit_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_map_autofit_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_map_autofit_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_sankey_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_sankey_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_shape_legend_swatch_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_shape_legend_swatch_v4.png create mode 100644 all_static/images/migrating-to-v4/migration_tickmode_v3.png create mode 100644 all_static/images/migrating-to-v4/migration_tickmode_v4.png diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md new file mode 100644 index 000000000..383172ad5 --- /dev/null +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -0,0 +1,959 @@ +--- +description: Learn about the changes in Plotly.js version 4. +display_as: guide +language: plotly_js +layout: base +name: Migrating to Plotly.js v4 +order: 1 +page_type: u-guide +permalink: javascript/guides/migrating-to-v4/ +redirect_from: +- javascript/migrating-to-v4/ +sitemap: false +thumbnail: thumbnail/mixed.jpg +--- +# Migrating to Plotly.js v4 + +This guide covers breaking changes between v3 and v4 and how to update your code. +Most figures will render without changes; the items below call out where output +or accepted input has changed. + +## Contents + +- [Minimum Node.js version](#minimum-nodejs-version) +- [Color library swap (tinycolor2 → color)](#color-library-swap) +- [Chart Studio APIs removed](#chart-studio-apis-removed) +- [Mapbox traces and subplots removed](#mapbox-traces-and-subplots-removed) +- [Country name lookup (country-regex → country-iso-search)](#country-name-lookup) +- [TypeScript types](#typescript-types) +- [Scattermap icon defaults](#scattermap-icon-defaults) +- [Map subplots auto-frame to data](#map-subplots-auto-frame-to-data) +- [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default) +- [Geo `fitbounds` framing for antimeridian features](#geo-fitbounds-framing-for-antimeridian-features) +- [Geo subplot zoom limits](#geo-subplot-zoom-limits) +- [Shape legend marker outlines honor `line.dash`](#shape-legend-marker-outlines-honor-linedash) +- [Overlaying axis `tickmode` defaults to `'sync'`](#overlaying-axis-tickmode-defaults-to-sync) +- [Sankey layout algorithm update](#sankey-layout-algorithm-update) + +--- + +## Minimum Node.js version + +*Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* + +Plotly.js now requires Node.js v22 or newer. The previous floor was v18, +which has reached end-of-life. + +This only affects you if you: + +- build Plotly.js from source (contributors, custom bundles) +- run Plotly.js in a Node.js runtime (server-side rendering via jsdom, + validation scripts, image export pipelines, etc.) +- install via a package manager that enforces `engines` strictly + (`yarn`, `pnpm`) + +Consumers who only load the pre-built browser bundle +(`plotly.min.js` or a partial bundle like `plotly-basic.min.js`) are +unaffected — the bundle runs in browsers, not Node. + +If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a +warning on install but won't fail; `yarn` and `pnpm` will refuse to +install unless your environment satisfies `engines.node >= 22.0.0`. + +--- + +## Color library swap + +*Implemented in [#7536](https://github.com/plotly/plotly.js/pull/7536).* + +In v4, Plotly's internal color processing was switched from +[tinycolor2](https://github.com/bgrins/TinyColor) to +[color](https://github.com/Qix-/color). The new library is actively +maintained and supports modern CSS Color 4 syntax, but a handful of +behaviors changed in the process. + +### Color string inputs that no longer work + +**`hsv()` color strings are no longer accepted.** + +```js +// Before +{ marker: { color: 'hsv(200, 80%, 80%)' } } + +// After — convert to hsl, hwb, hex, or rgb +{ marker: { color: 'hsl(200, 67%, 47%)' } } +``` + +A color in the unsupported format will fall back to the attribute's default. + +**`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer +accepted.** + +```js +// Before — tinycolor parsed this as 0–1 fractions +'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) + +// After — the underlying library reads them as integer 0–255 (truncated) +'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) +``` + +Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` +(or any other supported color string) before passing them to Plotly. + +Mixed-format strings where at least one component is `>= 1` (e.g. +`rgb(255, 0.0, 0.0)`) continue to render correctly: the new parser treats +the `0.0` components as integer `0`. + +**Numeric color inputs are now rejected.** + +```js +// Before — silently accepted, rendered as near-black +{ marker: { color: 42 } } + +// After — falls back to the attribute default +``` + +If you were relying on numeric color values being coerced, convert them +to color strings before passing them to Plotly. + +### Color computation output changes + +A handful of Plotly's derived colors shift by a few RGB units. Visible +places where output shifts: + +| Where | Example | +|---|---| +| Heatmap auto-contrast text | A `Jet` colorscale heatmap shows text flipping between dark grey and white on mid-luminance cells in the teal/cyan band | +| Auto-generated `insidetextfont` color on bars/waterfall | Same threshold shift around teal/cyan-ish backgrounds | +| Sankey default hover color (dark BG) | RGB channels shift by 1 unit per channel vs v3 | + +### New color formats you can now use + +The new library accepts CSS Color 4 syntax that wasn't possible with +tinycolor. All of these are now valid anywhere Plotly accepts a color +string: + +```js +'#ff0000aa' // 8-digit hex with alpha +'#f00a' // 4-digit short hex with alpha +'rgb(255 0 0)' // space-separated rgb +'rgba(255 0 0 / 0.5)' // slash-alpha rgba +'hsl(0 100% 50% / 0.5)' // slash-alpha hsl +'hsla(0, 100%, 50%, 0.5)' // hsla +'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) +``` + +See [test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) +for a working example using each format. + +#### Browser compatibility + +All of these are parsed by Plotly in JavaScript and normalized to legacy +`rgb(...)` / `rgba(...)` before being written to the DOM, so the browser +never sees the modern syntax — your figures render the same in any +browser that ran v3. The note below only matters if you also mirror these +strings into your own stylesheets or template literals. + +Native CSS support: + +| Format | First supported | +|---|---| +| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | +| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | +| `hsla()` | Universal since IE9 | +| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | + +`hwb()` is the only format here that won't parse in browsers from ~2020 +or earlier. Everything else is safe in any browser shipped in the last +seven years. + +--- + +## Chart Studio APIs removed + +*Implemented in [#7812](https://github.com/plotly/plotly.js/pull/7812).* + +The legacy "Edit in Chart Studio" link, related config options, and the +streaming token attribute have been removed. The `sendDataToCloud` modebar +button and config option are retained — only the duplicate +`editInChartStudio` button and the on-graph "Edit chart" link are gone. + +### Removed config options + +`Plotly.newPlot(gd, data, layout, config)` no longer accepts: + +| Removed | What it did | Replacement | +|---|---|---| +| `showLink` | Drew an "Edit chart" link at the bottom-right of the plot | None — remove the option | +| `linkText` | Text for the `showLink` link | None — remove the option | +| `sendData` | Whether the link uploaded data or just linked to a file | None — remove the option | +| `showSources` | Hook that drew custom source links next to `showLink` | None — remove the option | +| `showEditInChartStudio` | Pencil-icon variant of `sendDataToCloud` | Use `showSendToCloud` | + +```js +// Before +Plotly.newPlot(gd, data, layout, { + showLink: true, + linkText: 'View on Plotly', + showEditInChartStudio: true, +}); + +// After +Plotly.newPlot(gd, data, layout, { + showSendToCloud: true, +}); +``` + +### Removed modebar button + +`editInChartStudio` is no longer a built-in modebar button. If you were +adding it explicitly via `modeBarButtonsToAdd`, switch to `sendDataToCloud`: + +```js +// Before +{ modeBarButtonsToAdd: ['editInChartStudio'] } + +// After +{ modeBarButtonsToAdd: ['sendDataToCloud'] } +``` + +### Removed trace attribute + +The undocumented `stream` attribute (`stream.token`, `stream.maxpoints`) +has been removed from every trace type. It was a hook for the Chart +Studio streaming service, which is no longer reachable. If you have +figures containing `stream: { token: '...', maxpoints: N }` in their +trace objects, delete those properties — they're now schema-rejected. + +--- + +## Mapbox traces and subplots removed + +*Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* + +The legacy mapbox-gl-js–based traces and subplot type have been removed. +The MapLibre-based `map` family that has shadowed them since v2 is now +the only map implementation. + +### Removed + +| Removed | Replacement | +|---|---| +| `scattermapbox` trace | `scattermap` | +| `choroplethmapbox` trace | `choroplethmap` | +| `densitymapbox` trace | `densitymap` | +| `layout.mapbox` subplot (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | +| `layout.mapbox.accesstoken` | None — MapLibre uses open tile providers | +| `mapboxAccessToken` config option | None — see above | +| `plotly-mapbox.min.js` partial bundle | `plotly-map.min.js` | +| Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | +| `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | + +The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, +`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), +so the migration is usually a rename. + +```js +// Before +{ + data: [{ type: 'scattermapbox', lon: [...], lat: [...] }], + layout: { + mapbox: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, + }, + config: { mapboxAccessToken: 'pk.eyJ1...' }, +} + +// After +{ + data: [{ type: 'scattermap', lon: [...], lat: [...] }], + layout: { + map: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, + }, + // mapboxAccessToken removed — MapLibre needs no token for the + // built-in styles +} +``` + +### Built-in style values + +Every built-in `style` name that worked on `mapbox` still works on `map`, +but the tiles backing them differ — visual output **will change** even +when no other figure changes: + +| Style name | Old (`mapbox`) | New (`map`) | +|---|---|---| +| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | +| `light` | mapbox.com light | Carto Positron | +| `dark` | mapbox.com dark | Carto Dark Matter | +| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | +| `white-bg`, `open-street-map` | unchanged | unchanged | +| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | + +The three Stamen styles (`stamen-terrain`, `stamen-toner`, +`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API +key. Users who need them can supply a custom `style` URL. + +### Custom style URLs + +Custom MapLibre / Mapbox-style JSON URLs continue to work. The +`mapbox://styles/mapbox/...` short form is no longer resolved, since it +requires authenticating to mapbox.com. Substitute the full URL of an +equivalent open style, or self-host the style JSON. + +### Static export + +The Mapbox logo previously injected into static SVG / PNG exports of +mapbox subplots is no longer drawn — MapLibre has no equivalent +trademark requirement. Attribution provided by tile sources (Carto, +OpenStreetMap, ArcGIS) is still rendered inside the map canvas. + +--- + +## Country name lookup + +*Implemented in [#7856](https://github.com/plotly/plotly.js/pull/7856).* + +`locationmode: 'country names'` on `choropleth` and `scattergeo` traces is +now resolved by [country-iso-search](https://github.com/plotly/country-iso-search) +instead of [country-regex](https://github.com/etpinard/country-regex). The +attribute name, accepted values list, and ISO-3 output are unchanged — +the difference is in *how* a name string is matched to an alpha-3 code. + +The old library walked a table of country-specific regular expressions +and returned the first match. That made it lenient (substring matches +worked) but ambiguity-prone — strings like `'Republic of'` could +resolve to whichever entry's regex hit first. The new library does a +sanitized exact lookup against a curated alias table, which is stricter +about ambiguous input but accepts many more legitimate forms. + +### Names that resolved before but no longer do + +Strings that only matched because of overly broad regex fragments now +fall back to the unrecognized-name log message and the location is +skipped. In practice this hits inputs that weren't really country +names — partial phrases, generic descriptors, or strings containing a +country name as a substring of something else (e.g. +`'Republic of Foo'`, `'Not Iran'`). If you were relying on a +non-canonical form, switch to the country's name, an alias, or the +ISO-3 / ISO-2 code. + +### Names and forms that now resolve + +The alias table is larger and the input is normalized before lookup, +so a number of forms that previously failed now work: + +```js +// All resolve to 'FRA' +'France' +'FR' // ISO 3166-1 alpha-2 +250 // UN M49 numeric (number or string) +'\u{1F1EB}\u{1F1F7}' // flag emoji + +// Historical / native / punctuated names +'Burma' // → 'MMR' +'Türkiye' // → 'TUR' (diacritics stripped) +'Cote d\'Ivoire' // → 'CIV' (apostrophes ignored) +'St. Kitts and Nevis' // → 'KNA' ('St.' expands to 'Saint') +'The Gambia' // → 'GMB' (leading 'The ' dropped) +``` + +Matching is case-insensitive. Sanitization also collapses internal +whitespace, drops `.` `()` `,`, maps `&` → `and`, and turns `-` / `–` / +`—` into spaces — so cosmetic punctuation differences in your input +data no longer block a match. + +### Disputed-territory codes are retained + +The user-assigned alpha-3 codes Plotly historically recognized for +disputed regions still work: + +| Code | Region | +|---|---| +| `XAC` | Aksai Chin | +| `XAP` | Arunachal Pradesh | +| `XBT` | Bir Tawil | +| `XHT` | Halaib Triangle | +| `XJK` | Jammu and Kashmir | + +These are layered on top of the standard ISO 3166-1 records via +[src/lib/custom_country_codes.ts](https://github.com/plotly/plotly.js/blob/master/src/lib/custom_country_codes.ts). +Whether a feature for them appears on the rendered map still depends +on the topojson resolution in use. + +--- + +## TypeScript types + +*Implemented in [#7680](https://github.com/plotly/plotly.js/pull/7680) and [#7868](https://github.com/plotly/plotly.js/pull/7868).* + +Plotly.js now ships its own TypeScript type definitions. `package.json` +points `"types"` at `lib/index.d.ts`, so the types are picked up +automatically — no separate `@types/*` install is needed. + +### Importing + +The package exports a default namespace, named exports, and a global +`Plotly` namespace: + +```ts +import Plotly from 'plotly.js'; +// or +import * as Plotly from 'plotly.js'; +// or +import { newPlot } from 'plotly.js'; +import type { Layout, Data, TraceType } from 'plotly.js'; +``` + +A minimal typed example: + +```ts +import { newPlot } from 'plotly.js'; +import type { Data, Layout } from 'plotly.js'; + +const data: Data[] = [{ type: 'scatter', x: [1, 2, 3], y: [4, 5, 6] }]; +const layout: Partial = { title: { text: 'Demo' } }; + +await newPlot(div, data, layout); +``` + +### What's exported + +**Trace data** — `Data` (the union of every trace's typed data object), +plus per-trace interfaces like `ScatterData`, `BarData`, `HeatmapData`, +`ChoroplethData`, etc. Each per-trace interface narrows on `type`, so +using `Data[]` in your figure lets TypeScript pick the right trace +shape from the literal `type` value: + +```ts +const data: Data[] = [ + { type: 'bar', x: ['a', 'b'], y: [1, 2] }, // checked as BarData + { type: 'scatter', x: [1, 2], mode: 'lines' }, // checked as ScatterData +]; +``` + +Other exports: + +- **Layout** — `Layout` (the full layout interface), `LayoutAxis`, + `Legend`, `Annotation`, `Shape`, `Slider`, `UpdateMenu`, `Scene`, and + the rest of the component interfaces. Pass `Partial` to + `newPlot` / `react` since most fields are optional. + +- **Config** — `Config`, `ToImgopts`, `ToImageButtonOptions`, + `DownloadImgopts`, `ModeBarDefaultButtons`, `ModeBarButton`, `Icon`. + +- **Trace/layout enums** — string-literal unions like `TraceType`, + `AxisType`, `Calendar`, `Dash`, `PatternShape`, `XRef`, `YRef`, + `MarkerSymbol`, `HoverInfo`, etc. Use these instead of bare `string` + to get narrowing on attribute values. + +- **Shared sub-interfaces** — `Font`, `ColorBar`, `HoverLabel`, + `Pattern`, `Domain`, `LegendGroupTitle`, `TickFormatStops`, etc., + used wherever the schema reuses the same sub-attribute tree. + +- **Events** — `PlotMouseEvent`, `PlotHoverEvent`, `PlotSelectionEvent`, + `PlotRelayoutEvent`, `PlotRestyleEvent`, `LegendClickEvent`, + `SliderChangeEvent`, etc., plus `PlotlyEventName` for the union of + event names accepted by `on()` / `once()` / `removeListener()`. + +- **Animation & frames** — `AnimationOpts`, `Frame`, `Transition`, + `TransitionEasing`. + +- **Templates** — `Template` interface (and `TemplateFigure`, + `ValidateTemplateResult` from the template utilities). + +- **DOM** — `PlotlyHTMLElement` (the typed `Plotly.newPlot` graph + div), `Datum`, `TypedArray`, `Color`, `ColorScale`. + +### Notes on a few types + +**`Data` vs per-trace interfaces.** Prefer the `Data` union for figure +literals (TypeScript discriminates on `type`); use the per-trace +interface only when you have a value that is *guaranteed* to be one +trace type — e.g. a helper that builds a `BarData` to push into a +`Data[]`. + +**`Layout` is the input shape, not the resolved shape.** It mirrors +what you pass to `newPlot`. The post-coerce internal shape used inside +Plotly's own code (often called "FullLayout") is intentionally not +exported. Likewise `Data` is the input shape; resolved trace state +("FullData") is internal. + +**`PlotType` is an alias for `TraceType`.** Both name the same +string-literal union of trace type names; existing code that imports +`PlotType` keeps compiling. New code should prefer `TraceType`. + +--- + +## Scattermap icon defaults + +*Implemented in [#7825](https://github.com/plotly/plotly.js/pull/7825).* + +If you used `scattermap` or `scattermapbox` in v3, three rendering details +have changed by the time you land on `scattermap` in v4: + +### Marker icons now respect `marker.color` + +`marker.color` on a scattermap trace is now applied to the icon by +setting `icon-color` (plus a small `icon-halo` so the colored edges +read cleanly). In v3 the property was set on the layer but the +underlying icons weren't SDF sprites, so the color had no visible +effect — coloring was effectively a no-op. + +In v4 the Maki icons are loaded with `{sdf: true}` and tinted with +`marker.color`. Figures relying on the icon retaining its original +artwork color will now render in the trace color. If you need the +original tint, pick a Maki icon already in that color and set +`marker.color: 'white'` (which becomes the identity tint for SDF +sprites). + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap icons uncolored](/all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v3.png) | ![v4 scattermap icons tinted red](/all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v4.png) | + +### Maki icon set updated to v8 (via jsDelivr) + +The icon CDN and version have changed: + +- **v3**: `https://unpkg.com/maki@2.1.0/icons/.svg` +- **v4**: `https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/.svg` + +A handful of icon names removed between Maki 2.1 and 8.2 will now +silently fail to load (HTTP 404). If you were using one of the dropped +icons, swap it for the nearest Maki 8 equivalent (see +[Maki 8 icon list](https://labs.mapbox.com/maki-icons/)). + +### Legend swatch always renders as a circle + +`scattermap` legend swatches now always draw a circle, regardless of +`marker.symbol`. In v3 the swatch went through the same code path as +cartesian traces, which only understands the +[Plotly-supported symbol names](https://github.com/plotly/plotly.js/blob/master/src/components/drawing/symbol_defs.js). +On map traces, that produced inconsistent output: symbols with names +that don't overlap the Plotly set (Maki-only names like `'airport'`, +`'cafe'`) rendered as filled circles, while other symbols (`'square'`, +`'star'`, etc.) rendered as broken/empty paths in the legend even +though they draw correctly on the map. The v4 circle fallback makes +the swatch consistent across every scattermap trace. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap legend inconsistent](/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v3.png) | ![v4 scattermap legend all circles](/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v4.png) | + +If you were styling the legend swatch path directly based on +`marker.symbol`, that selector will now always match a circle path on +map traces. + +--- + +## Map subplots auto-frame to data + +*Implemented in [#7884](https://github.com/plotly/plotly.js/pull/7884).* + +`map` subplots now auto-frame the view to fit the trace data. In v3, the +same layout produced a world view centered at `(0, 0)` with `zoom: 1`, +requiring the user to supply `center` and `zoom` (or drag/scroll) to see +their data. + +```js +Plotly.newPlot(gd, [{ + type: 'scattermap', + lon: [-122.4, -73.9, -87.6], + lat: [37.8, 40.7, 41.9] +}], { + map: { style: 'basic' } +}); +// v3: map opens centered at (0, 0) at zoom 1 +// v4: map opens framed on the three cities +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 map with world view](/all_static/images/migrating-to-v4/migration_map_autofit_v3.png) | ![v4 map framed on cities](/all_static/images/migrating-to-v4/migration_map_autofit_v4.png) | + +Auto-framing runs on the initial render and again on data-only updates +(`Plotly.restyle` of `lon`/`lat`, `Plotly.addTraces`, `Plotly.deleteTraces`) +whenever the user hasn't overridden the view. Once the user pans, zooms, +rotates, or tilts the map — or explicitly sets `center` / `zoom` / `bearing` +/ `pitch` in the layout — auto-framing steps aside and preserves the +chosen view across further data changes. + +### Opting out + +Two ways to disable auto-framing. + +**Set `map.fitbounds: false`** — recommended for intentional opt-out; +explicit and independent of the view values. + +```js +{ map: { fitbounds: false } } +``` + +**Set `map.center` or `map.zoom` explicitly** — any value counts as +user intent, including `zoom: 0` and `center: { lon: 0, lat: 0 }`. + +```js +// Keep the v3 world view: +{ map: { center: { lon: 0, lat: 0 }, zoom: 1 } } +``` + +### Which traces contribute + +Each `map` subplot auto-frames independently, using only the +`scattermap` and `densitymap` traces assigned to it (via the trace's +`subplot` attribute). Each contributing trace's `lon` / `lat` arrays +feed the frame, with non-finite entries skipped. Traces belonging to +a different subplot (`map2`, `polar`, etc.) are framed by their own +subplot, not this one; traces with `visible !== true` are ignored +entirely. + +**`choroplethmap` traces skip auto-framing** because they carry +`locations` / `geojson` rather than point lon/lat, so their extent +can't be included without geojson bbox handling. When a visible +`choroplethmap` sits on the subplot, the view falls back to the v3 +default. Set `map.center` and `map.zoom` explicitly to frame the choropleth. + +### Antimeridian data + +For data that straddles the antimeridian (points on both sides of ±180°), +the auto-frame picks the compact crossing range rather than the +long-way-around view. For example, `lon: [131.8855, -179]` frames as +`[131.8855, 181]` (a ~49° span across the antimeridian) instead of the +naive `[-179, 131.8855]` (~311° the wrong way). + +### `map.bounds` is unaffected + +The `map.bounds` layout attribute (which restricts panning) is a +separate concern and continues to work as in v3. Auto-framing computes +the *initial* view; `bounds` constrains *interactive* view movement. +Both can coexist. + +### Relationship to `layout.geo.fitbounds` + +Both `map` and `geo` subplots now expose a `fitbounds` layout attribute, +but the shapes differ: + +| | `map.fitbounds` | `geo.fitbounds` | +|---|---|---| +| Type | boolean | enumerated | +| Values | `true` / `false` | `false` / `'locations'` / `'geojson'` | +| Default | `true` | `'locations'` (was `false` in v3 — see [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default)) | +| Re-fits on data updates | yes, until user overrides view | yes, every render | + +If you use both subplot types in one figure, note that `map.fitbounds` is +a straight on/off toggle, while `geo.fitbounds` also selects *what* +contributes to the frame (visible `locations` only, vs. the entire trace +`geojson`). + +--- + +## Geo subplots auto-frame by default + +*Implemented in [#7895](https://github.com/plotly/plotly.js/pull/7895).* + +`layout.geo.fitbounds` now defaults to `'locations'` (v3 default: `false`). +`geo` subplots — used by `scattergeo`, `choropleth`, and any other +location-based geo trace — now auto-frame their initial view to fit the +trace data, matching the behavior of `map` subplots. Figures that previously +rendered the full world map (or the scope's default extent) now zoom to just +the locations they plot. + +```js +Plotly.newPlot(gd, [{ + type: 'choropleth', + locations: ['CAN', 'MEX'], + z: [1, 2] +}], { + // v3: full world map (fitbounds defaulted to false) + // v4: tight fit around Canada and Mexico (fitbounds now defaults to 'locations') +}); +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 geo world view](/all_static/images/migrating-to-v4/migration_geo_autofit_v3.png) | ![v4 geo framed on Canada+Mexico](/all_static/images/migrating-to-v4/migration_geo_autofit_v4.png) | + +### How to opt out + +Two paths: + +**Explicit:** set `layout.geo.fitbounds: false` to restore the v3 default view. + +```js +Plotly.newPlot(gd, [/* ... */], { + geo: { fitbounds: false } // world view / scope-default view, as in v3 +}); +``` + +**Implicit:** setting any of the view attributes that auto-fit would +otherwise compute automatically disables auto-fit for that figure. Which +attributes count depends on the projection: + +| Projection kind | Projection-specific opt-out attributes | +|---|---| +| Any non-`world` scope (checked first, even if the projection is also clipped) | `center.lon`, `center.lat`, `projection.scale` | +| World scope + clipped projection (orthographic, azimuthal equal area, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon`, `projection.rotation.lat` | +| World scope, non-clipped projection (miller, robinson, mercator, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon` | + +In addition to the projection-specific set above, setting either +`lonaxis.range` or `lataxis.range` always disables auto-fit for that +figure, regardless of projection type. Even for projections where +fitbounds doesn't overwrite the ranges directly, the fitted +`center`/`scale` would visually override whatever framing the ranges +imply, so we treat setting a range as opt-out intent. + +Under the v4 default this means figures that supplied their own view +attributes in v3 continue to render with those attributes — no code change +needed. Auto-fit only kicks in when none of the relevant attributes are set. + +```js +Plotly.newPlot(gd, [/* ... */], { + geo: { + projection: { rotation: { lon: -75 } } + // fitbounds is implicitly false because rotation.lon is set + } +}); +``` + +This differs from v3, where `fitbounds: 'locations'` would overwrite any +user-supplied view attributes. In v4 the two are treated as opt-in to +different framing modes: auto-fit or explicit view. + +### Projections that don't participate in auto-fit + +Three projection types skip auto-fit and render with the schema default +view even when `fitbounds` is unset (i.e., defaulted to `'locations'`): + +- `'albers usa'` — a fixed composite projection with predetermined insets + for Alaska and Hawaii; it has no `center`/`rotation` concept for fitbounds + to target. +- `'craig'` and `'satellite'` — the internal scale heuristic that drives + `fitbounds` compares data bounds against world bounds in the projected + plane, which is unreliable for these projections' non-linear (and, + for satellite, perspective-dependent) mapping. Auto-fit would zoom + incorrectly, so v4 skips it. + +For these projections `layout.geo.fitbounds` is silently forced to `false` +in the resolved layout even if you leave it at the default. To fit +locations under one of these projections, supply the view attributes +yourself (`center`, `projection.rotation`, `projection.scale`, etc.). + +### Reset button behavior + +The modebar's Reset view button restores the auto-fit view when +`fitbounds` is active, not the schema default. Prior to v4 there was no +auto-fit default, so Reset simply restored the schema default; in v4 the +initial view captured for reset is the fitted view. + +--- + +## Geo `fitbounds` framing for antimeridian features + +*Implemented in [#7891](https://github.com/plotly/plotly.js/pull/7891).* + +`layout.geo.fitbounds: 'locations'` (and `'geojson'`) now correctly frames +choropleth and scattergeo location traces containing features that cross the +±180° antimeridian — Russia, Fiji, Antarctica, New Zealand, and the Aleutian +Islands portion of Alaska. In v3 these were mis-framed because the underlying +bounding-box computation (`@turf/bbox`) reported a bogus whole-globe span +(`[-180°, 180°]`) for any such feature, and the fit zoomed the map out to +match. In v4, `computeBbox` uses `d3-geo.geoBounds`' widest-gap longitude +algorithm on the feature's vertices and returns the compact crossing range +(with `east > 180°` when the range wraps). + +Because v4 also flips the `fitbounds` default from `false` to `'locations'` +(see [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default)), +figures that never set `fitbounds` explicitly now participate in auto-fit +too — so this antimeridian fix reaches many more figures than it would +have as a standalone change. + +### Which figures shift + +A figure sees a visible change when **both** of the following hold: + +- `layout.geo.fitbounds` is active — either explicitly set to `'locations'` / + `'geojson'`, or left at the v4 default (see the opt-out list in the + auto-fit-default section above), and +- The figure contains a `choropleth` or `scattergeo` trace with `locations` + where at least one location resolves to a feature that crosses ±180°. + +Figures that opt out of auto-fit (`fitbounds: false`, an explicit view +attribute, or one of the projections listed as skipping auto-fit), or that +don't include an antimeridian-crossing feature, render identically to v3 +as far as this fix is concerned. + +### Example + +```js +Plotly.newPlot(gd, [{ + type: 'choropleth', + locations: ['RUS'], + z: [1], + colorscale: [[0, '#c33'], [1, '#c33']], + showscale: false +}], { + geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }, + width: 700, + height: 500 +}); +// v3: fits to a bogus [-180°, 180°] span — Russia is a small red strip at +// the top of the whole world. +// v4: fits tightly to Russia's actual longitudinal extent (~19° through +// ~190°, unwrapped across the antimeridian). +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 Russia mis-framed with empty space](/all_static/images/migrating-to-v4/migration_antimeridian_v3.png) | ![v4 Russia tightly framed](/all_static/images/migrating-to-v4/migration_antimeridian_v4.png) | + +--- + +## Geo subplot zoom limits + +*Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* + +Geo subplots accept two new attributes for clamping interactive zoom: + +| Attribute | Default | Effect | +|---|---|---| +| `layout.geo.projection.minscale` | `0` | Lower bound on zoom, expressed as a multiplier of `projection.scale`. `0` means no lower bound. | +| `layout.geo.projection.maxscale` | `null` | Upper bound on zoom, expressed as a multiplier of `projection.scale`. `null` means no upper bound. | + +```js +Plotly.newPlot(gd, [/* … */], { + geo: { + projection: { + scale: 1, + minscale: 0.5, // can't zoom out past 50% of base + maxscale: 4, // can't zoom in past 400% of base + }, + }, +}); +``` + +The defaults preserve v3 behavior — figures that don't set these +attributes are unaffected. + +One init-time wrinkle: if `projection.scale` falls outside +`[minscale, maxscale]`, Plotly now dispatches a synthetic zoom event on +first plot to clamp it back into range. That emits a +`plotly_relayout` event that v3 wouldn't have fired. If you have a +listener that distinguishes user-driven zooms from programmatic ones, +make sure it tolerates a single extra event at startup for figures +whose initial `projection.scale` is outside the configured bounds. + +--- + +## Shape legend marker outlines honor `line.dash` + +*Implemented in [#7845](https://github.com/plotly/plotly.js/pull/7845).* + +Shapes rendered in the legend as filled markers (e.g. `type: 'rect'`, +`'circle'`, or filled paths with `showlegend: true`) now draw the +marker's outline using the shape's `line.dash` value. In v3 the marker +outline was always solid regardless of the shape's dash style, so the +swatch didn't match the shape on the plot. (Line-only shapes — +`type: 'line'` — already drew their swatch dashed in v3; only the +filled-marker path was hardcoded to solid.) + +```js +Plotly.newPlot(gd, [], { + shapes: [{ + type: 'rect', + x0: 0, x1: 1, y0: 0, y1: 1, + line: { dash: 'dot' }, + fillcolor: 'rgba(200,0,0,0.2)', + showlegend: true, + }], +}); +// v3: legend marker outline is solid +// v4: legend marker outline is dotted, matching the on-plot shape +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 shape legend outlines solid](/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v3.png) | ![v4 shape legend outlines dashed](/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v4.png) | + +--- + +## Overlaying axis `tickmode` defaults to `'sync'` + +*Implemented in [#7684](https://github.com/plotly/plotly.js/pull/7684).* + +An axis that overlays another axis (`layout.xaxis2.overlaying: 'x'`, +`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to +`'sync'` instead of `'auto'`. The overlay axis draws tick marks and +gridlines at the same positions as its base axis, computing labels to +match — rather than picking its own auto-fit tick positions. + +In v3 the two axes drew independent auto-tick grids, producing +staggered gridlines that were hard to read and left no visual +association between a gridline and a specific axis. Sync eliminates +that overlap. + +```js +Plotly.newPlot(gd, [ + { y: [1, 3, 2], name: 'A' }, + { y: [100, 300, 200], name: 'B', yaxis: 'y2' } +], { + yaxis2: { overlaying: 'y', side: 'right' } + // v3: y2 picks its own ticks, producing a staggered grid + // v4: y2 places ticks at y's tick positions, with y2-range labels +}); +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 staggered overlay ticks](/all_static/images/migrating-to-v4/migration_tickmode_v3.png) | ![v4 sync'd overlay ticks](/all_static/images/migrating-to-v4/migration_tickmode_v4.png) | + +### Exception: categorical / multicategory base axes + +When the overlaid (base) axis is `type: 'category'` or `'multicategory'`, +`tickmode` continues to default to `'auto'` on the overlaying axis. +Sync'ing tick positions to category slots is almost never the intent. + +### Opting out + +Set `tickmode: 'auto'` (or any other explicit value) on the overlaying +axis to restore v3 behavior: + +```js +{ yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } +``` + +### Incidental bugfix + +`showexponent`, `showtickprefix`, and `showticksuffix` values of +`'first'` and `'last'` were previously ignored on axes rendered with +`tickmode: 'sync'`. Any workaround for that (e.g., forcing `'all'` on +overlay axes) is no longer needed in v4. + +--- + +## Sankey layout algorithm update + +*Implemented in [#7830](https://github.com/plotly/plotly.js/pull/7830).* + +`@plotly/d3-sankey` has been upgraded from 0.7.2 to 0.12.3. The schema +and API surface for `sankey` traces are unchanged — every attribute +that worked in v3 still works in v4 — but the underlying layout +algorithm was rewritten upstream across these versions, so node and +link positions for the same figure shift. + +The most visible effect is that links tend to be straighter and cross +each other less: the new relaxation step gives more weight to +minimizing link travel between columns, so flows that previously +swooped across the diagram now run closer to horizontal. Node +y-positions within a column shift to accommodate this, and exact node +heights / paddings can differ by a few pixels. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 sankey with crossing links](/all_static/images/migrating-to-v4/migration_sankey_v3.png) | ![v4 sankey with rewritten layout](/all_static/images/migrating-to-v4/migration_sankey_v4.png) | diff --git a/all_static/images/migrating-to-v4/migration_antimeridian_v3.png b/all_static/images/migrating-to-v4/migration_antimeridian_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..3782747b17d5ca061e65c44f8b864da78b8e5922 GIT binary patch literal 84216 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 Ee>a+Ui2wiq literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_antimeridian_v4.png b/all_static/images/migrating-to-v4/migration_antimeridian_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd61c50241233d5f933761c4588b50aea0948b9 GIT binary patch literal 81653 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≥ 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 literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_geo_autofit_v3.png b/all_static/images/migrating-to-v4/migration_geo_autofit_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..01157d91951ae99fd8f709772f8628fb518062fe GIT binary patch literal 98871 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 D9rhJ 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≧f3}aqi+(&amm5Zg^q>ilb=pCh5?9w~=Q8!$HayO1kSJ zobRo$D$KFG*MV%LoO$*DTe}7IkuMTBNZ+pXoiGU-oY?yp1GtQ#q7^0{*=!2<@ zL~M0)%gBqlVzYg?hutL%moim77j2T0DK{h-@KX2)9jbNu)OCac;}^}JgBN<=kx?ud zrTL2UbZ4q$YGO$(_dMRbp(U`i_%7l$4^qF7*7|)i7|>q!M2kn?)tFqCf+4pP01{w( z6U1tn8fI zKJ16zeR}S_UGjIRoq!=$4`Tpf-txkb^tdqMu-h>^}F)WQ(Fr zPm%mG;CAGN;@%jAmNuCy7u{*^ukOx2!&g72J;Rp>v(Bg&UHgp)t|WX*z7|qe5jr3o zp*Dd^)WU!f=_&#gt>$8(*#J@vuMfN(WM>7xUFNj)>y4q75s{YF>bAV!(*AV2j=GiKILq!o!=lyTyBG~T$}w;m_If-@=Od0e`lKWJvk zUGI=eHi?@T=B1kVBCP!r=`)!esa8`l?^Yl3N|Y-HuT%|kdm0wMrgP}W@0t(`sVxos zo9C|%{cb4O*V;cL`e)Q*L3vW|-|u2@ECCwCOGtp1vFCGh%Ld}xQqa#sa#%jas-a&2 z7k3uFXc_TA(I-0Q;4pdkTxsW9*J{vn8kUL$BdYC)oLqb-r+J7GLKjlxB z2}M6?x=i!RU1>x$Ej#jQOU(4sod*|7wy ztlfvG?cCb8shAceDByLy6F_;Jib$vimm6^Ft_*wDk*=}$M%^Xi33H=<#|=?%bi(Rl z+wPYnl0caZog|>SJUK)}asEBH23-AuebOQY zdYMl>di_J8ztwmmE>v`8_Mu2@IyK>1-aVqfhQ7i?i@& zJu%(?Oh*Qo$Y4>gRx@8&@)JxVMsn1a_?u3S04+)xC0S8eN3Q>B(Z`09oNIQhN z=(?2MqWrEL;N_>ihJ79dPlYsF-hhsv>CH`RR{n~-d@+h#B%|%ouae%~AuMPg@DOVw zDI`lu{tCBzcN+^Ksf|3f5=;x@=t2Z~EtubjcMBu|FA;3Qb8%#O6FiJ50n5|NZARHp z>M$8vr_HpmPwD}}j$hEomo+6}(CMulleIZ)trSaZbZ z`yH#mV?-zQ&cZ?mYv#yuzl=XkV42b@FVX#sXv$g6Q{f$(=O4r>-zZbx7g4zzK0mq9 zRUeWRqLlaqu^1XC>ys(AWkxwKDtt8@slUadL)+FV^@tCWf;SrLk}oI|r#AU_if(5=9al zzFC2<6i*eAVyd#(#1M+Vs?|lA2IHqRF4W{&p?)wIq9_jPZ6cXpWrwwwb1UsnXCna! zGkpA>Sq37!!L>aM3a0AO%Um+Y&NYnCtIePB!*y{&$>Muln24xBHBu9G3qrbhPC<@5p0Q^l$;Y;~JUTeI}!?^_utE^;MI4omE!?W#ePHxG;YDFm;4QforGqR9y6*t|4vUPMZtF& z6H-9_$FTweP4VJ2Na6sOXcV?^!tMT;8XDLTR8(MJB40&jZj_#oV}8@I9$apT5-GH86AQp1ZXZUIUfOC=cxpE#WA;dX|DnR3ax9*BU zW#3xyz0&L4E3GqpORU6J<&r#TzD0T4p27k_>A$O<4Cw9X_FPphw~|&_bd+XA|331= zp7)A}zYZD^1X)9uL!I!~3}O0UFT10THp7`(no*}I&qw$Zf@Xv`D9N1Mxq7=Qom)LLWz9c3~tyVKh)3hOAhY^2^5 z`IKjNpBxSYnfa-ZiB!+|MpeM{cm(4E)a`qMhS*O4|o2L%Mu<-14kbq;x0h%gt;)DUj7egp@!jn!DWBuc|FhMJjp(4Sm#D z=)GJ_Lc!WCM{e)PMB!LcGIVtLDg6j20cklJ1+>xTj)j&))f4&j6nLP@@-P0L38oNq z?qH2jME=tf`N$$>#t`qDfH!gr-*{nKtZ=-us-IAX4X`9A-c44(D7FBz>kJX7eQu$& zr7Qz~(WGj0M9`YZ?}KeR5hMIVE9xBvh$XShJOKv%&zHwhjJtk-3zdbz2UD>&_D zFMWz&y|%v|Ym;cO_FC;5y(2+riH0=MS@ruHsmzbx{AW1-`MhQ zr7`N&l0{?4!Qb2)y{VwX?sQB46C?h{{uty%y^?c@k>k+3{t>3s3M{obZRgM=Po0!O zuq_J8vdgyr%31oBRwusPEY_J5zD>jv={VwVSjhxxCoe=Y?v;PB&=O{9g3z&#@20gnB9 zoW9MfRjEAB_uV>U{ zzCb9{tRK7S77n_~JXAtCv$`}LkL*si+{}KvwXmfmlG45r;we7vM@3y7W~H`b>w!~r z8ow%!aVFHKFs}b_!g=f9<+Wp~1Ty^%XXJQ{7rVR$>(FMqOL8jz%@&g&&jB77B7m^E+0j&3zba1U=5 z`R-Bc0)b)u|E=?c>?oPSUMe3lW}G4Wp6+J*?OET>!dBcii^76fmiEqKC0N6QR*qNm zG98|XvPA3&ZW7;#2QlT`fq!ih$JXN|N+m4);xLw(j5K5;6=T}e1s6i_iH|L|2k?{! zP=EkdUWJWcyWjv=G>8=FkT%4Df-CPy1TI6B0Q&M(92)lCpF(&{jC zKBCnlfk{uZi4Jh)KeVyIxnL?fDBaH3385y7J*8zF`~^hQYSO(*0y_a|#Tmm}+5vy( z{GCd@|FX|mnBuh~0BVcWJ^j7SZPg+h-iKsI|K4 z5grWP>Zq2iF zY=0do5~<=H;_|!^QJOpeTK_2dH#TEo((86HUvu79GdQ)s6XZIQ<77NP(@j#WFiG9Cl2>Ph5gszx)X`p@dM@vKN5z zM>=M^7mQmj{UIO4KgMArhg*N5Gmnun3q3IF4<+k=5pKmBq85ckV19N&>J0i zxucM;*?UZ2e7?#}?Rn9-?h5)-u(Nub)6q0X=zJ14a^?5(cXw)blG5kO3_ z+9_t~3+U=y-Ql35q#>GnkMhmyUd$j%=cTU79Y9}Sqm>4jJlWDWa_)#dFN^&pkX}$N zdWDhxu5@QQQKaCR6;PDidcP+wUWQzKT{O6 zz^Lv5cDVh*zLxQ|9HhI7RzqjlhUs6U;^Ad%#50(EiYBJD{9RXeeYvRY6NO6InZe1# zD(k}91KH5?D#e$Rm=}qg)tBe`z092dyITytE)PJ-hz$ZTw0z$s2Eu`&mfJ9UBwuL2 zm3fY~P+vLG?|f*9xfn^dzdC^Xv_P4;a*MrcWEnF@fNh>m6keu8Ys%A?E+NPH{8^*t z(Cjlk*5nT*4S5RzpHX7=(5@J z&B~KRhR5HTkoq81s7z`{RH}>Gy7bKq4Q!`!CzS2jjb2CstJ@v@8nO`0cMq2az4GyT zBV!`oV(NCy9=@^7ef)nL_^QWf#3;fJCEoh4C~oqF>#DOrRK#Gv%*%fAAWT|%S1Z|b zV-l)R3Kee|$Bv*9uV|PRs?bzOk-k`NR_yokC`wo+)@nFUlXz|s<=N9TBRHYW6(28j zWGmtZ#?_ah$vkLei}=u8i@Aw>l%gZ0$=crLQR+*p-?g5L*m^=X1j$<;UXQ5kx9!pT z9?y<5j*qNh79&P#XER`$pXgU+A$rmQM-d$IFv_jIb|DeK%l~!fi+Q?8wDmyT{l=dE zL(@61$JMrNdnR@ot3hMiXw=xYZM#V)Y;4<@xJeqPv27=fZL8nh@3%caA+y%Da$V2YHbi(U*@n?8b!XgxlY00_#_zJ2W+R zqYPMR7>sQ}8!R6it_49>_TWnX2)VI2tr&NR7GYSfRk@DF95U>t{NbU?+AKXbG=mxo z189@C&Dw9F-mbRZ?>+jXV~*FwMb)i%)R-ArO$XEhpHl_il|Tgd#&}-4f1%lnS4B+y z+Cm7!+UBeO3hufxjJ1K}?VYdJ5DuTa=GPjr{*@0(?olZa29gdx9o0Q`(eS}C^wH1d zhmL&94nkS-aZ0UVV!WqrD$Ymdyq1u*saOm@A^e^lPCIn1r>wHn!fA|pb)Z8O^nTGl zxtWLQ=pQ`Ft8`maf;tP?3@GuW^2D@e4%BnvZ45ga{t$ZThv81z@V5T*39WnJoRl;v z>)}jS{0|1Y#zGrg%aUvqB%$=iGZ&Y{c;q&UBzf~3RAa0)pq38}xX|ok7bWu>lr$eY z3O^e+H{ViLWbbN@^{-GjJWLxbDkPh}edjE${El zeGhM}#c0+i`lw$uP-vbh&IjL@Qe(wv=^&1sXJU8zwuZ%cO|-17xOI*uhQe_#&c^@1jpdlbgJrET!mpqJu=*!AvAo&>013 zdL57d3w$t$3bvC`2@2GnGI3ne0f`Un-OWd5XJn<#-6E@M1I1McL1z(Ub(v$sEay#y zgx|0l;k+UF2u$;aAR(t!ckU>(IZ)){K0-Fpg83`>{JuBeN(XE$bP#Q(XwEuVC07P! zn1S`r8=hG`J@JDj+eKm^eY@f)FxQlqV)fV-nvq;&b0dLf2;7_b9)mRd>Bj3m;)FycE|l5c+{I>=Pl4ILD>yA0QS7oE9R}iSA=?} z0#1e3%sdJzfoQl7>eknhu1p0{1=8T9*sK-Zt{J{k10vfQA2=2pgW|k$DIr zLZAV1tCk$g+wBkIoAGcgAf472X}E{r!F!gRlRhjlhC=@ablu}?;4s#kL?Oa$(?NHS zhTIR^z4QeGzDkTY)e>urJyLOeCGY(Bk|tYV9LV^)6)^8>;|qZ*@HYHXi7QS0p+Uo8 z$gRdO{OsU@*a+iIp;OlbsKXX&KQ)%=?re|oGh#03Ndc7^P8$gI?l(ujx6+M(aG*~9fiiUl>p6?Hvr^t&B5Qynz#X3i~@9saTkeD zDaTIJ^N*s3U+zyycm1Fcn3xzJ1f!~y0lt0LDt}4%xa8-V2eQ7U>c!8J(DhT%4V0`%!&(y%us(Sc~8y#-wK zVs@>>fywzjw%AMf6iMK}U@uOsq82^2=-pk%Ss7Hh-S3!b``6}t3GDsFb=b1astC~2 z1fJ6YyB(WlW5d8;NM+Q%*?Vyp3k5xbG)y(yt}4RpI6&2g1AGh~vJ-f=QV)(`q8-vC zNW#bT_{=cLB<}1}K~n@83sSVN5by3(YOX_8{#yOr&2I2h%KNI!*x2e*avF1&*>+xhkQl|dD_BU~ zSVusg!gK;(eb7b@^ycj~K#*d9R3*wUk<*QUg_pC=I~UfNNbHS>6-pfsUXtG>gdo=)5+sGvSv5WI_B>lfIFt6ntU z+E~OPv~#0}>poCZ>R4Ci#i-MGu+YdJ|yCh^!&-2d!t~%_-#= zfO`^w`@hZ~!wh#{ZC-X61AK~Dg_TaB!_y0iuA<1+e-~~;>iD-Nx*o<7j5yg=`w7)5 zc12Mqkd15+0<%3Cl}Mf%!!9xO=Ci3x4I^V@j?M8|j-=hVs}yc*oUEqR;FF17s@B!m z0u#l&FHYyRn{hLbtA~DbE=;C_x3u0)p>6z4TW`uAek!>tPlGP%+=rOE1REcBF+7xg z?BbXsq_qy%RTo15l;)lo?B6{)lGKhr*H`SkT$ZiEN?|;HmeYK$`5$4z@(kbq?0zZN z;m!=J{80U#LU1GE`JWh6`PrO$=)N9a@9n!-|ATDOSwMhm#6o2$0Fo;ji!N8sK+% zh&#DE$=~I0YX>ZQk94ZF4ExA1gBdD*{`3ywZ>3aiy+wIMe|1&7UMu*7_qMV}RsK^q zlLh*>dpg^UX}HtzL$xu=Sy2z2;pMu5`6lR$;Ivn|^U@HhhAlM4^nO(on&+ce+y2Oc z9kyvHegn#@CH|K8yiEwMBs2otgv4TCG3{0F!O2Qu0mj0ZSV>~0mqbN4f}sQ^ z_U1sQ4^d4C0}D$`yrbd*6?c}ae%envo!k)hVK7S|5jv^17J^fbQWlAQI2Z?K8V9n- zI~&hH3nt*=FyqJM$381L;e-3MOF%4w|E)%V5MeuGvO{xqZRPSW$6>SEwZTdb47WPe zZ*)~w#JUOEWv*NrUN)r4yFd25Q%Bv3TQaks4=xYcF=Nr9CX((BotCcZ&ZenO57omUE=BbyX8y9^^)zH{FrTcR%N=`Lhwfc9Babp(2;CIEg?qUE+yqZH>EkGDDVjgZ_>dNHV z@y$40eUkjXyo|UF=fwGce>m_Z&YP}n5j<-j4)r7%@v6%=^JEFJNtcPFqm|aEq1M*M z1SwKqK;@Xgul{8fFa9FYv7u3{tiO21tMlJ8=S=HXW?suKN0dm3F-7{G8SkLYN=CNH zGVAp_i+6Pi12+78P>Cpxt$WEUu-a)45;ir~KtA(p`pGyTSjoA^<$6CW(GZoj-k=6` z#(UqH;P~w_w18C-@dJ{;agOL+G>EAe6oYkukmvE^>vi22#HX+zTm zu69agNyrpw2>M-*5?-ha(tj^+c#%ZQ>ic2A=-LJlPy_Fqfe6aQ+vT3QIQy zksNqz9&37)No+!U!YVBPg*7#cPsUYqk4>X>ay%VG=HK{su_`#v-=N6e z$qS!4K?Yf>6x__ZRLjl#{P#>DPc>eoex83DcJE+i;!iRj+)Nc(Awcf9h*SjNtg1Od zA!5O2m-A1k#VZZK4oqrl+m#c!b@SdLY5lux$d{jKpcKd= zw+1rYQ)f^Saq?l?!X$%|F6f{eA4m2m#@&((sM1F=vvOnOG@VPTOAL}@Bad#arc_?U zk!tL#?zfRdUWPQkY}Ur4^9heE??$d5|3H2rb@a4HE?o5It4q}Vq`lIq=iyk571_o5{PjZ*=`Tpjl zlDbKsb~%ahL;-HJ?Ry+G{*tWW^sJ>umd@WyxLqup7l>|&^k#?Ak$1?Dm6>gejW2)|g>L&p+P-&{RDUl_K zu!9NOBwyV&zw(?QG^}Pw{l{8{kkDFTjs%Xxr|EGt8j=Z!FhB~2*?z+Xsu(|L83NIc zgyaW)4Icb9sIw!$$1po1T?x-a{H`#Fpu4$e4oO3cHa$|su7944xGvDR!TrFZsZ9DZ zNc1Gr2+f|f20>HQ7NnJ0F zvpObv`>T$!sj#$~*R=)yjbkQ=c;|2BrHD|;9eS)&(a##wvehk}uW2;z(H+GZnm=TI+SA&6d=9uUJ{0)cKKJ&Zz9 z4=IpNiy8-_(ybateyml$fFpm95z~!tQjBin1qWSch{xZ%9R^2@-y;aVMp{sM$AwEy^cv~KG7fwb(SnE0gTmp++6&8O~OiVbf% z@~xm29t!caKXg?lrHKu@)ZMaFi=J-E+N`|8{i{1Y&bf49Y<1Ed?O_nJ9+eN{iRyB; zE&M3|vU-!L7+#qV1Z3L-2Z>o_YpIx#ocrB6JgpAY91fU`?BXM-uq=! zC9%6m4c>dlfR!1DMvyf9dDTmeS>t!0vkNnLh<504Y(i=Gr0Roi1AJ4{l?VW-p(v}e&igYWGE@?)R zzMCD6ApvxKXAj<~j(y*wqh(0>{xghO$QY7@MSSsaYAUcnfJ>bsJDdRnjcH_M?>?EYG zOK6sl$~powEmveRn2KWe5M3eG+-=*?I2*=NA;~A>cW3-Q$B48thn!3DhHc9B({z65#>^ zLE_lV(Fz12g|TY?orcR+l?UmOPa>)QW*b-Bikqm?l$UK5FyG>7G>rAB+tiON0Ka^GtsIjQ^8ojD`tWbnH)+1&=BkvdFi2y~4) zSm!@%)ceCX-05D#xqV&!nPEy_B%K(H#ZnPYNb-pY9xyR38SfH4o<4Nq9aUAKsnLH* z;dYSV^Z)w`_9~rz-ekpVv#-^DYk$OISjM=4N*VcVRj^_a282JKPPujkeCylG74-)+ zY~C|UK~BB9kAhBZ9FofO_^|8NH=fp8IWvA0x0NOJHR7vWPP?y|^hai@_)PU)F+R|e z(Q_aHYGg^S98_sNG}FZ3bx8gN+x^!XNL1N)6)`7kQqCLVkswqw~^w_RW z&!C4}^c5GLWaBm3apG*YW_G0S{6BP7Bkh%Orm^QMbfK>AE)}_hZE#~X zzR%)1BNf~b-k5-=XG$x(IM4!UD-i52Uue;tJF(;!Txo8q%nM zpr%vYPwu5wB2-3BkbwF4G40nLRZE_mlVGl6N2(ztL1rE56y@2<*QuWm7lsz2f%}!{ z3_SRMlUgAPaJ}o57GxY^EeH{3W>l5M0_4+K7w}L^br~>u`Fk{r;VewL8{cdy0`_Q! zkV=;+rIFP78=JR@bqE;DMA(t-#WVEkb=ioL6p1{TXXsG)8`1M>=#db8CORw2Ls4MY z5?-Q`0Oy>V8w?O>OnI(UQ_ar7W5Fs%wi`SyrODikwp9nl4-hP*PqI`&Et~U8LK5Ap zhOni>y;J7ctX3sek@Y2GOU2F(y1W~rcf`L$>v`MBsPC%j#2g>dzA)#Y9&p-cGSUMk z8JxKTYa?4s3N~bm@@}Zmr;F7sk2%;9#|D{?XseWdQ213$C{IVI=wV7Ai{G$&ib7a$~qLbuf<3tRk(sKAX(`2;F#B|tZ$RBXiq zC!{5*1Dg-x>*eVsn8K>G*kb!K=#A@)hvQxpF%UrTNiHjKnFXH!lk*oYt6i=ek~IgR zQFMZG-*kzFtVAcNVaz_=0pJcwRY(C#p}y&ygw&wK#yxnQty08HUhwHJphp6BO0SyK zjxx$yn<8m07i#m@B){zhBoVWSk2SShx<#~=WE*;m#x2C)V3lw9lP7uX_r#n8B>iWO zI6rr!sh$*dPAu~ChRqq!x|k`WwxLiEupg|6m2gf2hArr%uX3))kB(xg*G5>N{a5b>-WGR z4iz8WR&EZZ6S{4xqK;_Ym`~MFT4o2jQMg|_JtfmH@b7$cCM~a=Jo_gs_bTo=4NzzT z7b%r1e*{7k5~j+{930fjuK=^GSg??S34)2_GDES6w6~WoC+$qg&L4ldQ~c;d#Rgsy-8;lwXg3QqhJF7Lxfq1P&`qvp&;5; zKq=`Gd5+ik!iOTIF8x;j5lmxxAhg0V&;ieBExxP?L zJto;N3Uc^_lGNpBD7adh%DYk+$Yu|QMp0b(a%deX z_IEAfULWnJhz17Mbfl+&C)0g1G+BHo+6`~KIw0va38*`k(;KiuRv_1B;)G~s;sZ~G z)mjD%_myPPhyW0;wai;Vw!x%1G-^Qb5&qqoan(La|Jx(^)X&FDo8i=2b8gDzVv*!; zgH@nSY9A5332l&o$48=&0qtrrUL1dW9sUn_eNq{HutzH{o%S*?{bn4a4Bn(tX`1189>-lVF?)9cyn-O(F;47-D!}rsUj{^4hXhL zJW&G>^@sDRXKfCV(Le24Ydh-(CG00*|0;=SQx#$&l~IEBY`fPKnKPkDa_`ZVvwQnN zBwv3?<(%D{?|XMuOiy6s*f@ht+1%+J@edjxq^(WGnmjSTE}+bmMm4)v*aSq;q#!HT z%H6HtD7SD|uGC~mY+l_o74#;%$mr%+hNEbDT?wT9hR&Yx_DNL`u`7|_$3@vIMovgm zX5K)_TP7_T0|`ohgtA)hbc1k(xF77(___ z@|k#1=C;Knh})Z%A^lsyNE4x5Nzqmhn@TzM7&l2b4ng6U!_9Ai-->j{dEQ1n&NXNQ z9!^I`yEU)&?*gOiRmntX-bE-9`H$VX`#B8>Ki=A;H14kt4Y!B{P6-nrx8a=nFi)?8 z#K~2(Q)3Kki3^XHjh!D5&rJKkC}iu6Pm73ewl^HON~%vM&%#1v+7?n;oN88R_x(rH z_#i%_2GMx;AhR7OZ)ISxbJ6>voL?CH|7HQ*fN<1g8d5RalLEkal)UG4AUv4>4O z-{Y*B`&tOu99R$V;!b26LBsiE zg)=t&Q$4a|0bN2mN*KVR0-ksvtUx*5jV2Z8V$u(x$--H*ldQw|o2z-Hdu-pR(`QS< zDICB|!ANAT(dQQ6q9Qv%zhb-h(GsBrawA@~xtEI2XU>Mnlml68>8dZdhNfu2*7o&o z&keJQQ2DTi&*0@t44U*jY@KIV~k&n;*Z8o5Mj~Ie>!UJd3<=Cf2PE@yJ=cJTRA2F=_FTX0HLp z(ZtU9E!v9%s6ni3R>sq?PiSHRJoIr8Q3M%!w2=Pm41t;Mq$WO0FQSY!g1?jhTO_^5 z^0=plmKd$yo?^Bj!++7OQh%WDOzi46 z_$T!4xw(|xS<}rLd^PNsFPe$6$a1*zL$$+rnZ*oD%n@am=&h7}g;sm8ES#6atT$UH zS||3a><_TpR1GFo7}uY@8iaBkhUR29%h*B`2anSZtq(S7g}b(RH1bur4bqcDq%cJ& z#`c;FsMBHhY88>;NAWZ$!XW(Xhw;jScQ95KF z62qCgUo_MTUCT=e&3zi z7gOnwCyNnr$qryx=coW{p{>f4C&hR_l@{ha;h8!LHVWs~dOXG;{f=#kBGE{7ZX2%6 z(~dzq+&iFvf2EUSW>JK4kn6r(^s++XMj^*NV;|mKmF|&LE769WNFoG0b@8kYt4d2z ze-q&jAd3U<8W=~LM0?km%QYH60iULGXE025xIXLiD3qtMKyc@!6!7+}s}d|&qw*Hd z_S&Z_y?KeTKjroxcv4D;hbs4!)`*Ny?Y{W=OUM#Tj~6;f9GD7VV2q0bN;I(qvXhQZ zLc6?8$f$v{-+n+ug~pZ@%^v@XHtrkN4#(erx=R$~vI5#eaIlhK(5EI`2UJHU3Fk`l ze%BZ8H*XvtxXW0yk9DW~u#@h76znNw)5)BD3tI3F0h@f0A5vy!5&*bqqhlqNA;+!L*YBobnW_ss82>EQ2GB#QcMY)yU zR>(exU}P7CfL*)#;G91)V~^p_QUei08}#9B=jLV3Ja908enTigd$kj^F{yI5wLH+z zd0&GO;iOV=tPW4pM2(P=rf0-Z%r7mX)=Zq&~?jfGL9d8c26*cK|_L!(9p~j|J)~O%9UrX{?%9HwH&{Vjz&Wtxl&dPQy&{T;N)Do zR>=Ns2tL4e9`LhKx9s)Xr_Y4_1>1c^Y0@{bBN2A}*A zprOJi##JHHtwn)_?Q4{P%(i`WGN9h(;;J7^?$fOg)fYIQXkn!afprmDao?5SSEeNV z5xwOXm*_xxs}XMYKD>RtZj$S9LBmKlf3D|+us!0VhSs9}gtIX0q3XpI zvjRL|%Zp1$DccypCicl&0p~OoTLS90UUMIvz0@6$t=d=uwBOl5WAOnY=$N4#MN3nF zmL=ayzo+!lff3sn<&X1qWcY6>YGdlF0c2=Isjz{ukRZ=ws}(5Wy^BzjiNt9*m*MhyZQdkX+QN%tyhVHm6tq1hhPeoYn7Bh_y^=gO0axwEuT_Zsbh+}D5}KU zxa(^wGPRLlw`Q5CZ_P) zH2%IvMg{}4dyu)Fpksgf9GEQT60ywLILqO*dHw@qFhN67Eonf+!C)f4y>IsKs0XMuML-$7Da>()nH!QLgpoC!K%A*a4d8b` z{3?k11K?e$0C4KZors1dXVhY5l-$e;u;3G@T^$G4lz&0jcRVbH;V=Jn7Fh-8GEd%k zgIwo=erE>a@fZ2a2KZ{e<5E^LZZBLybll!x#)sVsArO&~C{BJegt&epe5vIwNzScx#~>uNlwTwJ{^8(FXBHjB*L0a_#AZ7Y(ssP(>zKb#=3bDU#<91g7Rs==&>VbRx2UJa zxxF0$jaQL8&O(rTuo8>+Q?6Cu+241+Ga0<>p<$iy>@;l#p`#t*woBBv%32Ni!{!*u zZ8|`;#yS{^yOAm+gP${`>14V^-NV?Cio^xd0|Y7;>R1@tPzCT<&&=+5C}UAT?f{bj zYL9?D9>_=%Wm>1iqPvRvMbvzBJ6j{hN8@!%u-nT;=H+}T(%&`t(VLXunX2~i)gAFG z{^ZJt4CLbE%>x;fVN1s#ULv7>H7?0?g;Z^v33Vtf=8oM~Lh~mur8jgHuW2G}>HOB@XT>b3cs&_2!5O=djN?R{F9k&k+TLBz`{x(^a>^4B<%^ z1|)x1`E!JKB%GhX{5HImF?VR8sFgFB`-gHnJ@SF>{8z43k!$d<9@PCjyP~7=!Mtb@ zg?NPxPvUg?evxH5@Nc5cE?z5E*&+#0oF>dnOF(OD4O4@R4(hQ3m9qOp;#aygTc^C_ zxNPTv>`-2@-C--1p|u8(oRP_lybeQG1w>DcWC2_BcexHydm$f`&Lj;cbWhef0ey#a zX;dzNssh`V0J?IZUcfbA4J24mNn*YQF`PrZ)g8AYr~!l4sy%D~S#UA($rH`-%ioMg zc-D%Y_Nf8qP?Onnjnj6|)h!$}yDl?6l`e+p@%!&nUrgfE0>5r>*D!$tM zSoQ;CiFW!d#&0q-e)7uEUB${YWuPfa1%|0A`h8DDSzi8M_CfjYWZSsa%$d3`V;AQhkzy z_290^yQwW47}6V1*CLlqDW^Dg{BrY!5Il@I2c?^TMCrE1V_k$yQd4~VU&0(?rlFl5 z@vZ>|?bx^u64-tkzXZ=&*-sC9>2pAQ*I@8O_a8N@M*m1fGJ$=pa%w8&30X)isIK`e z*+?)zLKF#Fw?rB9>;j5-dgpKTCeeA?C>@;G6GSbPE*_%G&DlBjOpBSk`o#>u68vu2 z{tGHZmte@fD)q;oSD^Kqd|L#%S-)j+nPVG622i_t{oy>6eY-|+3W@0EjJ@+ge1d%( z{@YQXvNcdMYo-iI>$7M(XBUlJI>`i!?p&m7YcX#V7-<`9?jdF$jj@_r`~*zpXak!? z({Qv!y6(SO0Q;4uCiTdaR(9=4y!Yz*gfjN{;2{AdEdCIX)Mwy^!@%QJNO0y8An{3W?IRfJTwf?c_L%#et4iVZ+1zvmfCpVqNUDub}JO8Co`HK0EG7mdQ zYW5Epss?tRDeuSO!$2AT%U?=#sR09=%JbjZA<))( zEXwD)$$+B_8ii;pEz;H(v8=if@t~__Zrrta9cN+IaO7|)A*bDa;U%ZbStqcm^E~Rm z_Xle6MXZpHUDOcR=;x)lSn}29!gQm~5q3JzxGa=Op+Bi_)QQhmIqX-)u-&H`<~S8@ z{r>;W0w6K_z{8P>F)gNisCX_n_k#`0IM_~ud3<;OtrZJ+6OAk6-N9#6}$-J1&DwQmh2aYu_edhfdpw z^C0y)bX<1*YR@bZzTB)s$zkGRb0oPk_2mXL-sK<8=6rukNvLx-c5uP|Y5bj4@c zVFR*D?nNSalvvorOm#=k{b~itp!`|94T9Ry{m9yHwg5P>!188~JtX=oY!Wruhvne@ z=5%Mij;`|o7{`tkPb2m3wm}}eq3rhFIs|}%r8-94nReWpWg*;XvF_DJu$2^TYc>`d z#N}iS){%iIctkPhfHN`xXsS0%N@8JEONgSpiP+NGw?TjgVjtS`$iQ=O(cp?bzdA|d z1z_28yiy6<-PV6p=+h!yI{OcMkPdU)xq@)HhF-SjI&&v7!%Wq(!Kwn1mPU-Di=}4GkP~J>u<`Dx@{9@Tr}9!>oOi)owVxYc(Ah$?4s`f!c>6rH0NN)gnQt- ziJJTGIaZSccYUBlPCb31ZH0j$_Al&%YTNCU_HW=cMG3C;@A}pv6CW`?XCcnPEJYtOFT*z%$dY$#W3wfMQ0y%G%&jdpS{z zH!yMq-FVHMTA!*Ux)L4L@oAO;sd1Q#Y~w1Q3EDfu;ZfIjm!glDhOGjp79;7s-HQ|H zB8#=rP9Ca!UVwVgVrwttD!Py5yo~>~RD_uVV#%S*2c;#E&c^>1H-j<)bfKtT2O>Ju z5Qi_rlx8ON-bKTR^U19#@>dU5Xo5`z=WH9>?j*Se{~pzu)1>lT0Jni{yuBxqX8|Gx zu@rr+Z6+h2Mq@I9+N`MsS&7uRqCPY?(XBKZ2m`mrd~j-E>B5r(eJuv>vXe-6!`Ibs z&;F%T@D2~R*pg$F$DFFjK`vUy;@qmCx4)^_U%F_76N~DF5QCyoWyXjwrh#qHu~&F? z$chf~ajv}VCsZXB_6b|dZSf}#QZW*E?rf(fI&f&<>_FvMU{qdHr>d`j__A6pXAD}B zy7Q$0(^?u=OQ&yzIXxGc3KNiE>4?%qIB|%(GVtiX6j$EZ13%HyGebJ&-1}d0sHYj# zlY1DRe;3`k23dI#aD3&d47lC-3k;AhoaiY+5}SxDM8BDXQcpeu8W4d?sfhBAck6bn zZAf6jR;5wVXvH_6gXmjLn)+!s!=)_AQ4t<~{XL05xxPBeWvQ)y!HmnZywzc{*pwWm z9renzd-SX0taykoEeysGyIA${kLW1ul=tTH=Nw$ln3|A6<1Wd`GP0JPV}TjY=wNNQ zYf5k-^}^Veu*_!qjPCZR2o+2V1i(Pc)!trILNG9L?Y%2Kw%_N2@KfJoW^^oTIWTse z;JcY^z0Iobe}f&(#)=R<-+vG?X$wTm{wYil=NN*ag%F%_MJN1i=>FK77VVf}Vjs~L z#s`HjE@fa==zm(@ zH?b`HNB$e3h5HzAv%KzEOvM+`7wCeuEFpn7ShM;#9B*rs-{S(K!|1)iM5Lao9>oFK z{YD?5I1r1X3k};5K0xFL#FL2K3+boz+F}Lb+zi2gkC&I$S$Bp^cKcU)N8Gn}=vegG z$03Pw^Woc&%#gA$(_(}-#(n5bkLQs@>PNhXg|#;#Qs5FQLR4` z_6=mT`V<(7`a#A+?K_k2mb^}_bNXrSyO>oJq>ShyEGf57BMm|$ywqqaKZj-D)^|UC zJaj>cr0xpd)|O`Igbh`}n^H$HAu|?H2BWa8;kj>%rOCN^{oP}>M!~m;v=~dYAB+A) z9Bd!OxM)^t@%gOlUuDkb631Gw0EYm_>!lx;fq}k}mxllSlF>pss)K&RuPVU;x0KAx zg*Nu5UvUn&KTO7C8-qk>8Ai{DN_yeB-PxaPQSMTV9~+i^u4om?R2eO<5QyNdw08jG zCi(s7!MrVxyH8qso&LAJL82dB?fS5Rt{B#L7!ukCx8BEf>o*JJp9deICVt_Lq$vi& z%cwdCsbddxUuOA!&N8KXv68=tqSh?6vb7B(TL>*Co#ig40~K2ze@#j-W*=2Hmn23r z`nY+tA0C2|{)i+8aYXhF))yw&?nR(GVap+5ky_{#C)49bU)A83me5F(H7{?6A>y3% z6Qgdj#0knODxSJu8MbDi1j6k0X|L7~Pc82yQ@3TnA;2Qx6y<64epj5CU?4Fdu7A!S zE5vj20rf_mWIeAg4F{pQ+_o)9sP)V|FnJ&2Gmcq;ET4 zzWtfKpz@Q|JQ4#R+(DFQlmh9RUj!)s zC_4dc=&<1!asz%Knnb}AFg6(Rd!*B&At;KgmHN?pIDZtd- zvClXg5vnT;hvX*NPFX`_h?IbakuTU>Br)}K7G-gS-zUV78OpRRx=)zWUZU)ZCEBZD zE--uANt;kTdO3S=l{o#pM~3JEPhxx_4J1BViKPn!Me^hl-f2h!;(FB74cp}0;Y@$# z;?aW7;C8n+cOTiXlrUGjHWn(jOyUj4Y|rT3>+~0vgTZBTO5T+fqNqEd`&|jg{-w;T z#C$b1dOXLtv`@*ZZQNZKQC$h7q9UKH4PmrT0ynNu8OR>7IF}SS8OO4tQYCTshN)YsE23};UCuwh+%9_k#IGWv#1AgLqhYR^PFJ`G)hG!`@d8&NRnZ{ zWUyB_>llNa=?u{ZZ+;QP#Djy>)4$lFeuU9T)2ifpvW-X}Skw1(|A0CID?*8>)Ro@Z z3A-#>4P9~>4Nr1j(Pyp;UcTS;96K*TXyM%7%1*EuO|f7`Mf1xjxV_T( zvEZb+$OxcKx?P?5t}9WYBYqC4PTB6_Md2OrEGaOa4fpjfuE&hf77K=%ED9c5Do!g{ zAxy0tpHj!ejDCpHu-Y-5?yvkHtU$!%}S`msIcq`0O`}9tDtPSDAb(pZGX1ctNNsn zAxl;aCfv!#2HfW_36NiV&LtI7+@KaGHvHyvBU9L2=6L`J9j7*+`g2c2CNwuI1T7D z8imLYF7)HE%mqRj@rwq7{x~63NNx{EM@Qd|@hH-reGh4&MqXJzGnz5Xjj_tvBS%1h zvLO5PHETGYxC5#e#So>s3YzX z92Gwa^H~U-xPj^+u$H1N*Bw1VL5@j`@^g=j-_+KH#r!3=w4R|OmTTS+Gz!_*i> zJ$zkI40TWM#Ab;k*)eKo2Dg9dbckV&;|&$>v~X@IAk@Zv3$zo=$fo(T?5|fY`UJ+{ z8>usgvqkY1{cH%?EdBY3k}8k!k1khKG;w+aGx;N2yz?yg-%Wa0ft6~G;Oo#ep?6O< zI~81Z=o=o)DrO*pmpz6dCR*j^a9Q{KyaTTqc&LI-n`8TK1-%9boDT~EYTPiLe-|7= zS=0B*vd5;}C-6ybCDo)d*66LqWeO6~7h%5#LP9ESNL2>yZ>At4815G4}lVTtrhH$uWb- zasdzX*+-l{#my{#HAdyjbYQTb+kci(mp1#Nl2~`~Kt91rC-{wC zhCE3+;ok*zBQ+YYHa>D3t;Mf zvC03T2Ilt1n(gnO8e3~HcG-&Jj_yJ>k@eR{HaT&)X(cFbfA&H8J0VpJ_n6`?g0Ii! zy=stSv43_wK7rnn0l{7{yx6b`)V*G~;=rsD2Tlm`F_y)~D}VC(AZt2a;U(zE+_|zv zW_#u$=MJ3Lk#Ec1bc}S>i!|4ulr`{ZQ~w}Epd4nLXB4RswN)W$F#(AYq?lk9(;cCs zIL^^#Z4gjAsT6(SJuk8;b=Jq{A?LzJvq$qEXzI-JO3s>#hLVmkkX67QbHxm% zz3vV3n&cr4W+46`SYtV3Z#RYYtk=lZg4MPcQ~2~FWGm+GjB&*vD(&KBL3AsW`(*2s zVU_vL2l|9VJ9IHX?hZQ8ob{BI&U;tSuI`(Iy_6LUVwj0esNF~~GMu5kChg~=x<;C1bZ=&S~n)>AY^uv^^In?R$ zK^i&pSY)ukRs{ul%u(ap{>6hHge+O-MuHnJ-}d2?aLle^3-%c<3N({l#8pr65oU@c zQ#zg-*yDq>wl}FiDVZ4y9yM}sQS#VRBjQ`x3h-^?M{YBDR+utDqDCkU4!gRM*BoPT z2F?{Fcb~FmS!<$i+C%)Qk=gZ1(YnpqG@8fB&F)Mw4TD-ZMkwjVOmzbd;F{<_s*xR4 z`4bAIcO$(0=g^*oYKi7mVsn@u1rsl}Wwer3L%kXlUphoe6)m&j<0w`vM&20L-60Q^ zWBx5o@uqKY%WP#XS`sms98TtEi7Ni*>yn1II#(8iMhd8-d2j`uH1&&RpX2y8oLCg_ z3m2EdFbDgz6j@W4#fe`DHXTX&bZW%;!hFS|3q(k1-)Jgkc-k0zY=KD^6kwuaBEl+G zbUu!g-+<7R_;iJDQVUBBh^UtdQvWK1MN>82Ln%3AW8kFJBcsh!{1d-l^aSkxNQ7!6 zw}(etY{pZngkY}2bIPbRJYBZ^UQLN5f8e~T;A$UqrAYJC8HXN&N$pE#D8bsY6-0a) zV2W)*J#2<)534CgKT>OG@@4;CgJ`iPTMdYMU;*RQZ>R?&iHX>Y96m{(?iyw!>s}hq z`WG@*42i`F!3{PK&}K48PbWu-#^)4uO|eOQLxdW`2z+}`$AyzkFj;{im-YCVD-Ne= zKlToK<{e z3&Sis+8*hM1}aQw>>HT6x+FH(3$Ic<5|Lgrb(BfT)im?d)XqrF+?;~q4;BfnJ1lBn z$hi}&<;X9tX{G+>-}aYLPU(81Rv%7!{ba4-w~lG*>k=+~6O=9SntKUAaHCVHH?GC) zZ0Q2V9CTq)%6wwMK`irbVM_()fKMtcru`~6K`8+^E!ct?jrpHl6sUM{58<`m~-nU>! zvWR$W@g1n72pYPPvDNr~&>LLe!5SN&cdz~R@oFwCqI`^U^#F(tO|*_1VnUAZ{`h`d zJJ9Q`ZqZa=EzMj*)){)k#V99iH4rR}00*}qW-{h6 z#2d(AY%;5#>blEx=*)5Ly|6&KCnLX*kj44`0OUX$zarjSv>Qymixtu12^soKOm@v! zgoOeYlURdvU&#@zSX2|-2v6_~<{_jMDdr;R*Vwk;*vDp=JV19BXHoll?o+d~T$8!~ z#@t1I8;QX2**NVwa(w={vtv9^;{`?M>FeWSV8Ba=7tQ1s(Zc4HkV4|64sjMIL7=S> zFvuehB#osGAeg$cN>O??!DMiX(22ueyJvq4+ambShtIk%_5w8kkWUaEH<>1zC$nhF zrP6hHqKgeunAjEzi`5`ym|EfzWvPqP+r@)WFFD;^gb6X~gSvwJ>oTO%I=Sce9;6T5 z^(Ff7XTMD2yh40q%4E{DN}w)`;4 zGIEO{5^w}?ehd{33mJO;esZ^RCe&RVoTF>m>PrLRV((d*C z0d9s<-t)^Z3*I?kwwfnA!DUr^Bp^R5K2(H0A0IgIbq@2x$h{y?Edu)vAJ2&j!sk1j zWC5FRH%ycJ4UhXuPNQpeBd4P-X zGK=BZ)Czx6MnRyF2&7rEduV!wiCY)hS;++S;6eIQEXjn#Q%f?L%)uSU^!VkoVllQV z@Up{1@9nz#n@M}72?dZ6WjdM00FFTPK`_5vJ67Mfyuqc{iTa`oXs9O;rm#)c8J@h;>os`$&l{Dvi{{>5D%-+ z!SHELD|o*YcGM5~hV>Uhc!5llndxMb_8d9ZWTleg2m;N6z}k)&#hK7Tw-x%jCQEOf zzHai35plS~x0$@yl$lLZVt7oOI7=rz9sr>G>T%}`a*X)tnHfs3_}83b9y-~rvaBoj!eCZK#Sml1w`_^_+uK@0JMevdx2lO`so>B4h%(3#sd z(|(rt?A%*eO4`YI#u!5wNGEL`AoU=~B-u~5n039_7*8qzLLQ(Sbh7 zaDAX2f|Wd^!MC`GsWAeWOjMI3-r;KEHFF%xv`BHkVDh_&{w+xUunGe+Gn=62c;#l6 z8(*3yqvh5I{Q}wxCU%P3OfX(E5MGq0(7Ry3Q%v(Akl_w`*MY-D3wC07tf+sZJh6PR zecfv6vaLpCDfujO1WwG((xItoa(E>Kgb{>O83y?V(pr!Xt0PJgmZCcSz4{u}gvKNn z`l(FTGJH+*@_mL0ip@mM1JPrNTq$^wK1eBy-36&}sTjrmAyw3aQ#wN?OH)ay>;_g< zJYtA1K12HGQ@dylOBl~$vU?GeMvEo7KY#pL7S`rUU;XGHr4Rh%5rX;NPamVF4;}Tr zLa$hg2hl~kF(%5Pf!GnG^#GG?=D2ju>01c(BEIp7r)^sVLxI0TM^DmIyY|!8P3vgK zmJM{_S=$Nup^SlGWm$1NQ=I!rOl0t!(>%!MN6fH*0fTp`iA8?AuzQauK$)3Y!iGhM zCtyd1Mo9h|hX5p(jmxchb6T^aUl-1>Z9VbQHwAtsXW|9>gt>11j*aVhV4fljU_r@+ zmJ)Fo#KUqZ(txkpjU~MgKKdkm=SL6G*T4T$`uM$Hqdfrmtc*2hjY=y#PSTK+noghey(O+7;B4j%Dg5YTD3mli&!7%3fFchP~mkG4}AKITC#!}S2vT-1QXLw-uDfi zHqsB8kKgk(n&#ySrIgF_jo0;&xem>0fg>ixdzmO= zh2_zwcam@R96UleBNI|ms3PP?+_Zi*L0Y?Q!&=(H6X3OMjEFrSthc9|-t@{B(J#OL zR!xd+%OsPD9oqMNpaPaNwr2zB(rom#J2tP^8~Qq#>~2`Ivg|Y@pdg?WzlS{GwfNmhmf3%V5!N*KshFTcl>w_- z=-cwq^*3YYyEn_dVHmn7SS_Ek>Dy-fY5g*F@}P(T2uJWhataCU@slGIi$!uP$DOgu zQX>%5A3yvAb#=rD4@xOT5gx>`oCw`K5Jp5)N>N`d1}mjAX9i9Mk!zMElA&Vu^$j{`7D;4-t zN|mKwhv*<~KY#ogvTciA`|=y<_ulc^dGp`j{u;Xcg0uC}W01}we3-$&hVrQFAVKO> zD3Gr0Ov29IaT-D0;Aw8x4?gWCPcrQA!ac*${wWZ173$ zniT`VU}CQVfkQm*R1vLhqHN)J&@fFp$dm0#Dh1Mu6GbrTgqk9B;Gyae;l9iQC*etF zFg=8yDzO?C3||jB+D)-^_2#^Nhjc$`6bmSRi$eh9v6D&Z&v+2(WYT)s1!oc59)9vU z>gfz8eWx)21u2HK6r{Ir=W3} z?c(rw%KjOqK^LEUI-Pa;X@nincf8~Uw3*2)jsY5Cc+DjgluRQ5>=sY4l2B65P}HS>aeVJfBL6u=~J~N`f!DurvHVlvC+)`ipYXX|^y>S42C;*js7YAlORt zL~xWRs1|b!>{Gz|Y;{BlyaVasgDK5`ol=S*xkZ@@86N|s6d5FcbweP=Qrr_m!?c%| z6R})~&V7(OTrA;1lIw3M3l`waZJV`D+>ai5oG>^*zYbEAL?T5X!@;ny8$9?BlU@t} zLp(r_^Wf|o=-q`8N#eg59>^!BXZ5mVHxE#d93u_(3jNQ#Ssx8#7zSN?`32MieII^- z5E!#*3|QTr7^2`ZXT~R|2m~2*KL5<^bOsN?7#uO+&V@MjyOoLl=}dwl>FCZ9;#0nJ zHb|N0Y;(V8aLv9ebgrcG+eifPUgYNo(wbmtM|^mUl4BDDNoIbS;JwEaDaC}v;r0rN zCrDF-NtxZ#JT&UED7HBq8m6+Z`{ZSM!9~G)>=`uDR@d`VG!w z6B9h&(PPr?vJ~k0%P*wgW=So|@ZVnhGHrk3Z8y<|6@5A=bW`8)nwQc|S6)g6mmfqF zpHOzQB=-EXwi6`P*I#jwF29b%KbSB;4;MPyAhJ+XNHgJqbjs!xEu|EPn)|OzgP&g) zWjIZP@uxcencV;5{oumtT-Gs(htW5S{E>cdkpOb^uzrG_+v5KuPiTj^Z>qL3lic@= zBoefnC#Csmfb9Ac=6t_K-YccJX?fa|lP@NiLU_wTs>(3kOeCSBh8Yv2s!%7m;OrfQ zbN`-vZcokt;%9+PW>^Bmq4E0<9;IO(q(P9++`fqh`+EIg3$A-P?E5};kJhb)e(ihN z{>YO%$Ph;$DxsqWr?n06mHOoRPBx;(xbLv9Qr%#uc!C|ErBu4bu-Ql|zH z5akh;c8yNV4fcNA$Di3lLtK8;dG(5Zy$lLs4NMTn4;Q>b(gFR!pj*%mQtTVYwt`+_ z7X;=Jc#fB_{2MH5E2YTk>7po;)(Ec*K#w*|AI*=WxZRl9O>H2&29sa-8BE0B2fN+P z6Feq_Ak%Pjmh*8_!!()4X!ID@sL160I+IBKPko!L>plTd%J0XCCRH+_T!d-yTyGd;wMA?%Hy_{~j?s?k44rzk!+Yx|`Qi?#fKl0fxX=42D zkK9e4yzlFTay6$C_G9Ug?DS%LsJ z%m8t`5bBBn5lgLz4=k{BiRD*>Ta1Ck_jHyDFD4C%+pY+ZJ{Ag6zDy!XSenxWhuZ*Z z3?k`E0&$;jK%gMC1!2qg^Y4{XWa}lrUa~r3q_~Y3OvtPlw^LQTYqh(WEN2rkOp|;m zCY)eLnNbF%<~nM)*VAB9;P8Y1QfsRt%A_~JCRuTo9us$$i8Ba2q?-vQsvv$yGb}OG zRjIi;y2&&t!^{bWxG0y+lJy8CD@8lAywXbe-NV0-;7kWf=OISS*dkv!IYa zgfUEu^P0;yBuLGiP!5m#N|Y4@z0!n%qhB{aZY}ywKdpAY&cqW1s|OXspy#$t>nO(K zThOhQ?dw;ss7di-kyENnP#wUyUXz3uk%&@?SEnp3gex~0w81@xj#BYnx!lww+yVr; zc>sJodv4_L$T)rMp0Clreew(Xm>s+{*x3l_YF8|_AnqVbpe{UX2f-iGQ0#KXF6#V% zEX*gD2N<}cvEF#~rS!au&erDg3(g`)QD%9t2Pt&2#2PQ~T5b$jl3crLu2I}{&1H1{ zncHY=Vj4*iq`%q{_%RKGwrp5SkkCHz#B-#$A-I{04uK=c26(VsInbx?@dG{Nef)w! zm+GFcKEQRqk3Mnl*XYFXD8cQKC!a$wF@iwd5U}{29UGq@nUjm}1X0!H=8TXxQ~^MO zp&GzWW&Mv2k5PgNZh9u6H-{NaUL!1J0x2z&0PsJ(7}V9Qn`&Rok`Q>7oJ77ZE8Y$)g|Xr zIXfYt{*dNnP#8#JVfuNnN6Ay^43EJcMVP3*@(dr~^zak(g>V0m4xSih0y{<^_IG{h+w|q{{D@MVzst*s4?poNDgJlWCFjv) z=btriuI78_>HgxGJ^Ew^l&uyf%9yW$WUUs7Ng8c|K$<6m!z|?iVG64dbZ9~9pnD75 zPmkYQKO9IWHyHAl+kN+PuETjBRxNl^4-fm!3CoUcmQT*00vOvqzaUMr@V{1?q>d#q{^~ z(Dl!|h;F#*656nK6_33o zV-tjv9k9t{cx;@$`{Rdc?aG1tWOMGuB4aUc-6eY{W+&^C2X+!1xvtlGN|$fBz?o`mHLqO zsAW}|%Ce5OEGw@in@lq8u1-=sNMsU;c^p9UK!`!Y<{c}s7>c|iQalhlNHcx4AXQ1) zH4F>Msts})vYe}!v_m?co|!FJ7Z74h3V;{v2wzF@fVL*rBpKm@dE;Xu z!F#cnM!+X*{xv_ws=@vor!c~p6QId&6n7^1b=|v2_Vz8L zl+vmR5bl+(8J2&htuF5x<$u25}&6dLI+#`psS^fWhZSW{F= zy_kF?ZhIjBGGX_060R^HY^WiwAYsZd2*ea_l^96vlv0FcY%1~x0%rK_LlK&DkE{!`V)fj* zacwd0ruV~YE(%#moe{pB4TNG)y%fS*ho?L>Jxf`Wf3c z5&Ur?!{pQqVPhBWLD-;dkBw>|%_m022>M32$HyBG2It@+O{hL7rRc_MF4bwlFW-QW zu3I%oabCi^;p$5`+@+MjrV<|PMkXf7=8pBH*IiDpdeLYq zkjXHP272RdH`Ci*^#``27jF2>+4Si{VTD9G+;1x zc=ffv}Drqzw$ybh4W==3ZR_kproN#1bToqgVVN6R=WoJ#K#`p4 zROi42VA2RHR2`J!d)(B~WVl~4{Q4Kk2SgEdN{mjB!4q2Ol|l+@vt-toxGhBE_oM3k1@PMf5XHuq4^zXHan>b&6ncy=|7XD}yoQcOuHN~h`M$hh_gp+)$UqjUEsnc%|T59?pknG8WftkdN%P})YaI1Ws^W%J9o%$@Ps23o^Lpp!BlpdZ0NTK=>|y=TSq0evS@TP-crbv$du*|^&152o_uKa` z_X;9N{62yh7K;O71LJ}8A|M(wu5~h+w8rDyUIS_y+;(yNSg|ZIp>#7YMR=0yOCp`# zZi4DUsX7)*x0oOFdU3)-Seq^uuN*%-SCk)52C-nc|Ou`73*~1T3H^YPMQ6{{L`Dzcy0r8;i zrZeQGQ)DdL1tr7cp;f?goIzGr=U zSU+{Swgdu;`DzaaOe|-DEZDrni9r+w5}*t(nSuad;POC-Q)$9Ih-xi>LAu0)u+0)D zELY~IiJ2W5xDelbWR~xJf~A#vhewNkj?zu0h?sQfD^>niE-?h@f;tXz07*vMfE^P! zXnXPb$7h9#dEtZSBNAR&`iq{@9>foL_eLi(PGC&}S=uFymY&%b6FNDUNP`I#l5w!?w9;DN=cH3&*IB4~RMp z25AuRTIYi2rLp3PL9NpcOE2gKvWrQH!&3J`&qU7M4I)-QJ0$2yUV*G%4ojOd)EAW^ zG8~Jb!jqbuB9AAMofs2Ktn@5p$uT|$^WVC0E&1bj(7jx{5Z-c;YV&Y7$)OQdba^lb z8L(oDlpJyEby$LoK?BDlK_ca42}4*tkY@+S!6z5dX!0A<`c*4v3!81LSL$QUu#6Ix zj<~fS0w9w6j~ri6F%T`R9)J)n@GRhRQ zKTv*UR@cRIH3(AhLPV@s89aB9M~X4q2e}0q#AL&WIOOnhKiWDMs#w-l`B@z?O0zT{ z`n>f>KdexY>O$27^(uxjPV@n;1v#xefi^IrD@kX zyi!V!!(r+A<9AP2XP9?Ux9WPsqDhKp^$4_oOz01yk&#+_T@_28?2ZmSW5vLjnw$wu z6ayuU;W(lGa0FRSPtTCSGhp0f83mny0ckWG#I!X6(Bs>=|ImUuVuEIvW{&&bL&vlZ zFvw@VId=2}C7C=;Cz3gFuoE0%eUh8wS%({_0f6vUoiq4O}5{A@HqO=k#_U>HB`a<9p;Ns4P? zo+e+)3c~Gi+M4W_n^2K(zyxXH)DNr{kYR9WMGka!^CnX4G5`PIv6JM6;5HvXEXx*w zS?*)PD!+Zx`Y`8tH}1;x(Wdhbd6sfWW?qz<+!{*JKqNvqCUr0tC5zh#Cc&i=$M*^f z^}~hY8ihQ>eR&~(4_`E*#!4w3OXeghh4RBdgn`oK8C*^nW+WMI>=@{9ToHDl6SrbL zcqoHB4nH@zoQmZplVsX9m6CR0Fmem1L~LBUN;bWng0$^z(B%WE#QBvVKd|HDFV$3> zU)gG+m5hTjLGK=B=l;X(-~TKspP9BLpGcMB7GNbq0F1`bQ*t1;Iu;Mcn-Clv3Ks?&;+I!=uFL1YshJ_KxyF zWeH`_fy($n|KV}x5$Wq8q=_;p%VJ*YG6|p1L>OTf^g)#S=kWsu*+#$Q`=C5gLchPNi4*=;k000mG zNklW=C$V0UK}ea|whT1|CZ}lMNUvIh^z!4PZ-853 zY=S^klcVF5;j+(7nx}Lf=IY@wY3`)->@1r&qJ$dsB_Pxu6aECJg>=%>vouGVr*)hN zlWyee@Prt91c15I+eMIchxJi9QjwpG7Li@u6*EeWSdxu78B#}Vys?0(}s!B#8wK@XZHm++} z6->vbOo^E$UVac&yyO@h9hTzQB_ymE%&b^+K|Ks-?o3q-Rtr1>4j9-V`3X4bh6jm_ z&YK%z7nARxzt{zVW=8;nVzp&N`vZ9cfrNAg29i{Z+d+h-t2Rq&N%1hE6v4gPd} z51356?JkxA^90plB8vVdGSEx#v$+p}F&vxBNQBE=JZHtE0r8xkZi2L%c+%~%M3+dB z&3P#HC;YK=8RS~KSr%L>Hj9bcI7~R(7NCI zWH&z}jKhkBV?p;r#}^X&pns0Nzzz3Q1$@ML*&tBprK<-3P*q5=l*H*Saijb2A@4<1Lwkf14#}BL^E$7S4zQK zOzR>bC9eQz+cpUW#& z7E8U$44xAVl3i?+%yE<(L7+ke3XxtU(~&3X#Yr<^str+Y=Lla91FqqltsB;cW`S`W zE4x@x2@8PuVeaL+3E?dlsWuB&Y=%|Os$x*ESz=1e8L^YOSY8%Ojy%`XdbMskT`VZ+ z0hgB&iw#~#57K3impoI`Gvs3Mwk^Vvr5jI@QcCBAo$2x6F-lEN5hOV(k4X2j#JFf- z#8VJxA_P{%qWmsT^SeD~pok7KI7}+Ka9Zw;M=B z4Q^-pKKp~oBTgU4-Y)qC1HRv<`hT_&r=!qn3bB*oJVy`H&9+RFt2yiZ|u z-N2IG{EsO?wE>eYqEj(8tzAWiucmX#xgwjri1=7VLYpM!2Zb`VSSVG zGVHA3)p}y`e>W1z; z!+^G%AAb9$#qH-Ai4z8nilw?p5B4yFrIqEffi0~5;?_C{ z;EZid27O~N@x}YCYoHXtt_*{lj7OOKp9xY%588xOO?pQ1lefpFt~I7A;OpaN|jCg1%YZ2$S1LWIxBeWg}??I)G&tm zQeT9JUN6R6tbRs$LhQ$>^cv$8+*LhY)Zg7noji6UpRF6`R2ZPHfC+ShSCw#uFbaaN z)YLR#yv9TueNnMIkzO(XVt$Qn>BUMSehovw<(#mrsZ|P?T=H$r|6{Knz434X{l#e);B9!s1dX+fFdECu%XKGN4iq!g9=hlXPJbd$$3#RR8;hJ=C7;l^jP z^maZSP7`70@5Lerv?&5;J!l6(;}wvQ7))lx$uz}zrUhv#)%wriSIaQTO(gZq zEkAj@;1Ql}LYf5fonT3u}l;mf|XIbX2E59Qt3Uq$OEF zpe6|5GoAhl%ltK+Cev{iq>qWA!(bclfye8ea7&NK8SXG6c#!TOWG6N?~eDbTS?%d~9dDO1<_7 zlU9@x#1(yr9@CK)3$QT3#JCStDU8#&I=$Tl9su$SgSe&4of2I3=;uf&!k|la{zG4pOr`3a zizF`yRFA-p&FgjKbb+y2dzSIDnkBk^Ftn`*kLwUX>9L(xS&Q{Me!OB=s9mJfnS%TT zL>KXooERpY+w1X-$$Y}LEdu!!!pndxhyVV}E5EK7tnfne8$@Yd&U6zgwt57KE0#4u zg7f2)bCF)%CSs~K?!iWLg5tbt44wHIwhQ6S#jGvwlp-qj z!34v$2s1E9d>tmIHqXSAVG^V~DIOSbR7j-~U!@e4vm{C___ul8YJF(7$JNp&1l^lK!t1eA3jGuMv0&MJI|jhfiOKnmVra6E{FFoJ z{WPk%BHwD_NgP3-mIzex9>$7H8p|nD*k_K*iC2p-<*0B7;jIPIO`b*%FKJd<#7KV+ z#yzq+qJ*VF=;Bn822>NEpPON+ap8Ea?Xzv;TEbEgX2vj%ZMAlVr1Z-k0c9BEbazpP zr6Z7n76Sx&v!3UY;w8gk;p*;(G8if}o4tpQE^t?*^eWbg;jsmNwQ?w?V_2&^BppGZ zTm;G`ylB%2MLe8(+#zuT{cfX$1rr*H$UBl(YR1=;4)`YH9@)BO~IloR=GYfdoK?(H}Uy zJTWd1rcurw_fa6~%wqKiGg8wt1U+Pwv6EL}`nfJJ1AHA|3Dy8#l~S~_ueN2!1Rr(Y zeeehur7(5~6Kcd!5U3*p(0?tJJWg3C6{eWK=hg4M-+TC2!K}BeU!zxD!vYxG)=@8| z6ba#__WlF$s-}iGFAqzEM%2;K?d}fpnCvF-(TFl%Y7Cr+gJn;h$TIi=-s@Md&^5&s z_b@_!H6-%WKm?$>R&{pV#+6c`(V^RqA(8r zz=;hQuN>RVWgQ#75~~Q(nHyCg@GMr`{woJZ*&vF3uIcuR8`88Bh@Y2 zVM!B&RVk(OH7tvu+l!ssZoE9Ht;YlzdJ#*$8p~e7$X?J%Lh4@p0|4<%Cb4eM5{>otz?s30k@(!vQ;!FV9KFuoh=oaRX`?uGCIg*G$fnMc4Uzw-`a5d`Xl06P0(Nu$kz@L}Z!;c$=hGSQ9|lSsJv z#$!?pH35CPfts5L`+kkT&gF4Tn=vLOp8i7>$HWqoG;^vK*|l5Z)St z-)zZQS;C12U#e`7^k7*K5*(|*MmG#5AhB51#74H%?HTGzXwOM*$0=-FVR8#8X)q!txrSqD zNovr2sqE;d((wc-)6jbb5?mh`kYE7)!xffJ(>I=zAklV1TE#X~I z(`D)~JsY3@!q1^&Cl{dLaVL#W{^`MPe3CHmIlbMajKZ@!s5Ur|sC2~0aBPb7_fmAQ zPaD_~Gs%MwBt^=SlMATGA0{OIJ>6R2zQ3o7a9ykI%EAPWEo`-<}=qD1YN}5wg_xkvofb{ZYoWQ;W5G$%Yl)BUcxmeP=Oo80}05n z8F6w#XrinPf*&L;hH2*b%greS&=|LFTuUn%cet(`=p)?29j1#X6ll=sTvW;-000mG zNkl8i(xCYWY(d=}p7fis2xBy>rQqx={{?}zK_F}rT&!}~ z%w`l3f`!F}Fbxwzs8zwh9u{sfZu#RO^1w$Xf_s-bc+CM)rl zDFPS_{HiOSlxot;D?q+msVk(NhSgjvHXyyI2c){hZNkX*Hz2{K>Ql-eY2$ddQsKm3 z5NJgNg8e}`07r~KiW{t)9=vRe(5VOA7i-5-AfzmAI!(#2rM}QmAu0^+N%}?cC)HTepJQb=G?PXp46 z=UmS`mRs8GUf;2?NpgC-C^FDja8e3_OWdA;1^NoC23Z|3suht$y0tJUk8SWU#$`=2 z@x`eNzLd8X>0?6R^z{%V#=t=1!U^g9`Y3cw1?i*h!Tu$NgCBYe9 zX+}DJTwkq$dkWu4uI+}vj?Eh=6Q4U@GBr7^Pf+wNlLr)>A1(5DplQqfem$CbCg2h>+M@83EVz zw2DE2I<$mysgLYnFAT;=A-pZ|I4dutQc6dH6el{+%hH@)G96nl&84PiYBG3X`7kju zPKqVDR#%LogZ+eo0csKsOGT`Xs4j#2)E@zC&dEQ3yZ*UK4y}p+q$m3hAEV^>l$Kt4 zED=dEc?8Ktoy=HNuMFW#ZU-B<92?F}XYlnUk4rU_NRrhVV_W_HTd|0ijL-1WtEp7| zGLn=9fh9ly5>cEdy#!e=I!kQq4ohU;;p3XjkMg7)W26w?FqGQB4FlSIHCO@yI|c-0 z8ccj00x5-CwFXikoWc<4?;(qqI<+)c#(-+!tVz7nHmuQ`6CK;CNqS`^B7s^K0gIU; z`U6NT(Kkc~`Zb|*`ntJ)h!9q4Kz4Q8rsn+1WHN-l&dt*ctXFA)#nG8r!kN4E%0to> z1eOYcG`A-Z-=)gG+I+F0J1lN8mD0{Q@dy?nyg;E%4V1p~s|IpvEmrdCdE|1#fHYT` zW_}iOzr+aO6UWf)^^H<86ItR%(v;cHq|6I#3h- zY+ARPrnw#+4LUty@1bK&h=LTUSrBNKaB#gu1=7aNae z-`nSTzJL7K>^)~@&6+i9UDvf<%A3)o<;$?mP4A)=Nj-a$JP;`+*9cjmRtslcjSX9W+qF+QA(f^5>d)Qjt}0+DKQhA*&4Ks z*V88iPNT!KsgVhBw{M?SC#Df)(1~3he{R}_(g%c6`_Fmy@Fcu5Kn<{9QM>x7M_BG( z%icX68q(dogD!OrA8%%~S7@;H^OJcGN&1$kZk?>xN&s!Ai*Y5<>INF9>k1)Bipr+yzABVmC(x=DPsIoL|POdmrsSx&akAGWqL@q@a zS1?5KZvRhW>?{;M-?`Iza|60lHAFY}3Cl#vA>jpHfu1tDO|^!v54l+i{nxIehT1BV zrbvbszg6_tO!Z*p(L z7WAqnr6F^7!`~|?MR*8>)f@^hl`Dqhe~oYqOU;hvEXhq#Pw2umi%JoyshR$@OSKIb z^heq_AN#3E+!F%K$iYf`l1*pgvTzgk#6qF+`u%k!NvYgQn7_j3Rs0eJ1&!_Y7_8U{ zsYa~mn7tcK2|=Y2tyHf|kV8c-vrjKFUr3B$1kA<*1)ZN>gPeS1B(_F5}8#iFgN-z;l z7;H%)1tLc@{*CWAGXws_XsF};Mvs1{vFjt_)PsW6=Y*mh_}1h3Vz`=9K1F=*>0Zk6|YxLz^dut?(cihYkUcdiMxi?#|uO_M>R7 z1@)`%`XJmb=ku{54Xi+Cy2@qxluNXlE1hZtJ9EI!kFa#@)0EYo-n#hqBLKt7-HW)X zjE-(%g3AAeWio@+V1qXHKyy-qO$q<3aaOQ6e7sSdnGaug7yl(O|I&bFMq$P!#Ruu`_+{`P4G_IW|N*(&s` z!AV3=@%2YV8;g>}C-HEJXxtjVWFVdAq-v;+|t%jK4OTrCBfA$-^C@Lx# z8wTXbQV?@8$mKuZW<&U7Ti7nn`}IjdZc6b~Wg1g!=(6ktl;I z0hyw$Ex{S3Qb93x)A8xU_wl{^Xq#F%`QJ`8L{b!2*7_hC9#fKzP1Gg5Hyd?n*(>qB zlonNO7E4C8Y_5`iJ*JUIMnD_`JmO?o45l*Db#vrI+~+`ls<9_fmP2k51JS{c%P^0{ zof%;)GWi@b;$pgigKa^nE%?@s!3bvd!RWJ#c;YCwf$!BH(|0b}6}{60!6+E8TII@1 zZ%9oByHGVCw+Pn}$4beqBeol_{h$pDMp4>0305UK1Za3aelkp2xVgpEsvg*LUFoo- z_`ix>#Y$1yyXF}TaV06!L-{q+t`(ZO%n^ASsm;|4N`qU0lI7FSV2r)r#Da`6Gei4pF(Gx0ew5z$KtEMsDQ6$X+3}{!i!Bo|fe)wB z9)_9`%X$ zIXuJX0v67q{t3&TMps!w=E&pV#m(S}$8}I1Rkl7gt`;@m4;h5SrC^lg`;%Kep#mS( znW!Vu38m2;qqI0unOz)aGWmomG z1W4JxJvD*`%u}tla0FcD=SW6wKdu%oNX3@Voe(2MlfH32Ml4Aj5pY1+cz>vLrZ9kc|3Z5N&Fz_sL{n zKq_~z^bc?pbPR4RkpxjEk_3z_v{;Is_9h&?#2JG%C_W|(13XB5!UR?9@mZ^dvyCO; zTF;emJ~IlD8pA2t_YBZoV^sVen=Fhd0Y<@te}VGsdeH&<>5_)3>U&ZR+zDnKcRQV) zqFLUiqz#!5o5!E#Ttlf|a}YX~-qOT$Ov%N8noOglB+SuJ^vk?fzKP0unwGMPXG9_E zR^rsEr930+>n^IF>+Roalpx3KjJ{E!rLD8)UJlxi6logiAjvip;2d{j7nyhN44Bd( z-olV`w?dXf@kPo*-r_8&F4dQ6b$5 zh0%+un>H;g;*R>R25xH5Qd#KsP)YDfn(cjQ;8QI0z-3PU61a+lF)x@TMEv_1@|s*G z&_+~of4td}eW-mDsm*3;4+-EQ>*q+Yrv0OtVco00OT)|MH>iwVA_jR-aI#S;4zEg{ zYK2g!Xbu=HmKS-L1x^WcPmrS<5ee2rAd(tZyR?3{bOBUq0#!I@$@CX zIHkpDXoIV_d-6M1`90|9Ti*AGyXb0KWXzFNV-qkUc4IGQZxt#t9_~K%y>xSjTec*hbAb|-Ug0pEsEG;x)n!>1_L(h=g4f()> z?)*5-i=J}_6=EO#`Rm>Cm+x3!7;Ymt&_`vMD4C@qc#M6T`>+|ja+!H@Q%_RzV*6J* z6QIb#{Cz>qDQsS*P_B-xZi0!vC+xkkZ1)%GhwT<9xdj9Hf3mvoQBUO}F33I(|7bWn zL!Zmyo*;cz#-t$hG|?vhC#9mPIuwN#sI8K~7m@&$+0}H|ap1>wQ4=-iVk;%?LATU_ zZoPKg;D{O%g7rJVa-?f350ZQb54~nAr)@n#b39@*Cu?i$4<(=-lge7g?Zb5hk>r33 z*j*G<&LUxw>GVYnac9rRx+Hm1Y<+yeb>Lh{50LKW$pX|F0x>FRF5P@Cf022*i9x#D zK!A~8#L$s=f$YZAmte6C_X5GLQUEn|PjlDdCBF%a;@q8Jg!x`*cd_M1Lq0us1KcMd z>Tt%v?#_q`Til|Cn|OP9`6T<5XH&RH&rpQLlM7#CbUdg}Rurnc$cJ7gMO0fBru70i-t|4zJv;H2h$6QHw3yClEIV1P}JZEvO z7UD-)Txcy!3vhAX&)?8A3@MnU(-TouUH#fxG!(r=kJd=WtKa3)i{WL9I`h|dW5In2 zzPB4IY0q4xW4?N48FRG0U_;S`8KmTtckRK3qTas|jL~pv&cnfsu$A$K*(NPLjh(nC z6OO8_u)8H&VfuGZ;RK=Ig9<8D@Eak~Es|-Rtb=S+an%5I(JqxR=F!3rY$$2bjFHK7 z*@_c23AA>hD8H*e@3@8n0<=w_+StmwS>B=Jeug6J=eFs{9r*N@6y{OH645pk&Dajk zwqM?)e^PhyI#MZ`ICTKoaszVs4`enkD_Bv)^=Wac#IHgk%9r1LpDc89uCPx0p>DbQ zTS8cBmWxye5!Nn%ozsp;elSN={bo9;yB|2F>Fn!3XZXHN>GMqVEVD`z z&T)j}(}VpB0sCj|x6|*3TZ0~pdF)#}C1XexTt1yf-tM4m3tPTFe!H_o*f*C zhE4-?4?9s=xx?xBIWqdXd32&p+_|Z-$KKnSg)wJChW3o|{tEG$teAZ2Qx7w?gzp(M z`Qdo6J8m*xERUz}Xx5ua3BT>iC#R)AV^4EO2=}HZEIaqYi8yDmMSxM_-7wSXjf5{2 zxrBb()=;KuS+mewZ`hXZQ}T#fC~Q{eYO_+O@0lu7$2YP;Bh_@OhBS-FY7~skX^o-X zcihK)q4nyKXXjj3YR>>s{3w7#(TDjctQrV2|IVN;zyT>BZ3c$0=6e;VyMWEFwa+Js z6@UF!+Z#fqM4!Tmf;#qbfK5k0Q?1u+Xzq^NZj9|;PuSZOhq)loc~5maGfG*UU5WXi zNU;sr@~{jM3a@n_?<7cxtY~rAdcSaXKq)56oSd8O_rtyQXrDaM+-B&_>_H``Z${`T z?1YKa{91NeLm|zjif1B-bYzPcL$26fPsPyFX$~lOsi}?Px@&Dvy!1zwl|$_sbTcL) z##;Hq-xI%sGlI9Ni|i1XGv`r@qD(DkZ3$I%sT|J56cp!roG}K)xj5$mDf+_75V|V* z(=E$ex~9IVDK@Dj6w)!&K6pXts=3Dhm!iT=WZn*{pFi zS-Lsjg}bfXjoh<)i!FuxaF3FlgPG-fmi4oWq(kwc>eO)L{MaiSJs(bEp3r};d0AvW zcEH&lV{(=MbJEcC7WaBs;8P?J6!A9To0XvaZ7A_aNDL@FwT3JGs_Hm)_qweR7~eDT zrM;aeb@&i9B9@gs-w@k5Z2p5*%S`{1v;VTw-tbwnZb$e7dpH=rGZtC00879qiX2`` zN(TcgU9pfPyVybxHQ@VkKW~)^apJ0_pBfb-$W}?nl$P4?KTf|~AE>NVb1y8whopuJ zi!E(3#B2L3v4NlsqaTsr&L5f*soxuXY=4SN&ptAFLyS?|JAJW#cu-_m*^x;V;`4IG zm*gk>+y(2+R|GFx=SVKaGD*6&-danRta03zifJ3#%Fd9v>Aqd|ms1rg5p?4^(r}wL z$x3BCc#>=f3eEQGM)QjIWYj97-!$nN__)=!lf z|(#0h|srfPv*l^7$)Qo8Ti`qRnE$hkUjy;|mfbW4}JRdf#DXuXL0Hg~L14j*F2| z99Q#LtgLuwY>b-iL|Zz2O}P&Gc5_!wQjkx5=q*E$m9@2<=(cvUu}VU!EU8hpGmXED z_~rJqv#Oltl;w-#xAj+_i$5ub#SqTuaxmJ1!;hB~@@z0M*@GlG=@~D!WZ0m-Tv2Rc zW2Q-_t{1MV30@qT%Z<9)Ft)3exn!=7a}+BNVnE2*^sir3VG)e)CwhgrMde`#@lnGz z^G?_N8U>|aB`ldvM4R?!+ps8@n>`!%Wg+m-M7v;%Iu>r@LfZH;kO!L=2j1`$=lx9? zj+3#jicDyjymfzQ!x?K;Thc$mG>elOA4=y0rRJlepVP8UOED1nbFE6nM>ad5k;IC4 zqT?zv*P^?OL>yPkgQi+~n{ zDczG*!2y+$2XUY~nSMfx#`~k!KAFVH5MA`&HuvH7@4MpD2h)hZuF#7O#+#uRkrOew zZSQNOAz*x&VC59o-6OgGVF)| zMb9U_bvgBN@z(9O#2a)Aj7Fxfdgiwqs}YSdY2XIii?a93+vGUTG#s~KgHL{sK(B} zh^L67b_F}cjO!hyQH8zj!YRD|=reREeYNP30CH2itAA#y^z(YIC5Y8?z7lQ!IZC#S z??d2!w=vsU2YQ)+A{n%5nV{#`oa!^sRB2~pXo^E;b#Re-Q=$!&^jK@s*ocZ#$qNjQ zWr;1B2r=>eRijVXk~Qdk$7n0*+Jgx|K1m1~Xz_>xs9Of6rc+}_2tp$c0J+lVN<@Oj z2lKGFQ}X^g;-=o>&FS@Yz0XkS)t}0@%ZRQIZ0@cP{W}jbx62nbZ|4?efClZ5>(RjL z*7bFl?be^hf|L{mSAaY_1|9j!4vKZImFn~*U+947*EC5Fuab&K6dhcxVQ(9Q335z!i6HrVbY1i`S!}2@2m(n_ zqXc!LKKD-XW_7yJ-k$6^7Lr!B2J2v+?ck9Ji{!fw7yg{wbL>cS;!Vxze6iqqgH|>D zOC%M>7_TIa>^J|#&9z^}1av4Q|J}3U1=I$Ba@D7_5iuXumP!SHB&|0GuBeZFW}JP- zNS^Ja@S9zrCf>8emlA%H^F`;c&LXfCX}{Sm;rkMaj^HkT-9m|)v~GG4pyn4nVtDe( z6zXm{{Vu&URKE9RcLr65blpIp`2-q@W1a2*uYks3XHdOcsHdvx8m1%1f49OSd z85*SFCh`*i{NS~**YUaTSXJj5|MgPSr_klA(1o4f8C7`=r#@r(g|FH})!)bz1YiDc z_(hFk@bhsPvn(d}Y;{t0G@k2mF4lH+FcGK6h-7?pSTs+ymuly0IU=Ij(`Zd)yfrSr z=B_c^`vY+&iwG5}xu(aEuowZ#79R2pnp?2~)gYxqt?46~Ecj3@htYV|!gBSx^ziL+ zmIy{u-Et^9N*fst(f;1J)n(9Tw;fCEpb_lQ*;|I>i4_|)QXRaI@w?zJ8mv7N#*cS_ zX4FdQ_Oyi!=LrW%38H9hHrcr5DIrrCevKRsIA<~%wr3YZ#p%1s6&whD&Pg|*OgvZg z3UagK4aY3t`I`$^Tl&nZ*7Zka?&(iWbLFcC;D-auY#ru|wt=_oybCH$WQla&^0DF8 z>V@;Qh9#47YJRo^7mj#eNMF3d zA`%|zuHsJ8N-h=1X%?ih#?_t0!AdiFr3K4S#A7Y;TX{Z`&k^pMIm z2Ce&s6U+VqR7dzRL1wROY;$uaO6&QTvdHn>G7-(OC`FXs0&O7#g&4f>vXsH3`hrQ~ zgIF%9h%aLUm+c~d>V;h2VQQ%3bbkK9eI@tu!$tyHH@T=+V3F0!H8ofLsk=SWt2?t!Dub-91fTT8DMHLLGRI#Le11Uo>9 zA%Q?%ADc{bT2)laCNsYFbCVZxAFCYTfSR8YtG`lml8_3yYd%=FmJYh1_d|G0WYQ?2#q6gniYzU&y} z`e9O$bGuG_dmPdB>z?17YKwaSOFDaR;)TXx{)OMV$@MCTji_3b7^*M3Cjh`_+lTU# zLVsUBec+GID!&{})x`H>v%UB}{u@ZQE2raaJ7RBqV>&M@?(?BxGTDj(gYgriej7Ju z;Lc@?_q<{uOm>z`M5z1MO70uKO^53-tImQ+S(2Rgi#;f0Sjzcs13&UXOw$;={9X#8 zKZ5e)Lk8$W<1){utQwC4{VHo#Q-(p+#?d4O7+hl429>o$?FPYO@amj+rrF;ZLi?Gx zh1IE=Y_hl4%WVfl27Q9o^n$Ak%POW83!1f>ZU2ZgSAFDNrpQjzB~j=`gH%NNk3N!g z)y4QdT|wgVvA|(arTZWfZr}h+Kmjv_+4IFbiL>51HrJ;XHBcnC#yVYWDevn?@g~7F z`6GWk(@{)p{~Y&dU>8(G?4QsfaVx%%)SMJG%YO4k$7}FhcQZ9=R4fbSycC`#O?CW% zUmMo)>jdq*IN%e|+t^Xa^et$LVlzRd*9_*BO3p*cOiyR{lVyf-V0_^hMd4%nXsvxY zWyQ7OF1!z@@$96DA@imwh+%&h&^TPy2-Ay4AN)PZhJi`j=R0d#MMZvfrIV4|iwCuh zl|06O?V8({UFiGzu-+97|A88#5gA|fLw|#2o3&YKqMqZnP zS@rJIRK~qf{E0cB2J%$b-5+K5Y<&ZVbfz*tNBo*Mde3r1&|K)`IP2}sKm_$|A8+t+ z-h@a^oxm+yU&~Iq%AkONi5s`E%i5fUCH=sh*%T;H3YhprU?O*4UmH5o?C*R3Nn0`? zdDo>|!)wjaPE$CW${_Xi&*z|6>*-)t4&kt6_kNY_FXbG0KP3*OAH>pBo0hyWjQiaS zr;N1jhMkrupAWh*&Yahtj?$&fUG->)_KP>%_-)S)&eJn6qd@F~{lBlM6%T^yu!6?R z55eL+u66(xYw_ld?IfFaW#|#V%3L8?pd>A}-X~kc3VrS;7aw<(J@!nz2F;YP$25nH zZ(ydkt(TdTJNb2QxB}?BwvVmO6=PJCx*!*->niEa9l@^kx=Iic>gEk8O zyd!-y26fNlaygDxKWK0tlYi*X337dt3S?2(Bow#LktKZIE#JN$9m(*!>Gi3|$Gs3nWQ zf*9+!;+MgtI)vdFYrisoBSY%g42!9f0!YY(cb*4buvg)Mb;u!6dgt z`N=)+J1<}1C&DM9V&$-+TDgat{JY2XwcSEK5Fkq_N-Y5Q$OP!pQg)?!>*~h?xjKbb z&gPTnC&SYz*$T#4+&nLEy8VABgeDS_&fHz~!$ zMoH$_UlEl!I(Y~*=t`zm#_@X2rbasIUk|eceuXOX?Prlc1zYVWEVxaNL_tuTu0`58 zDv!=LP?7@@w{K9xB-D-@RM+6*({qU4Pu+`lG3>Tf>#J5N6Ma}@wZW(UG#(FXKpgPQ z@?x4wqh;zllGN-Aje~+>Pi+I3qkWD2-c+LI)Ev%>onMa)SR#fEDBJgJq1JT0?%#= z98wcXV^LQuTWmM2I^|N%~ z&Ftiw$_;t4oUVyCrc``u;2`sQ5G+O7#=|w!Y1v_{;MASF%D5r0dTsxp$`>VJInh+#s|AVt!@Er!VR7DklmiV4&v^0M5XapFia1#KuMZl( zrs6k-I0d6}Kka9fa|mHc)l)pCTe=SQbNZ;qT*`@@aPJ8lIGCX2GW-&$(4n%^k}dA= z&DBo&Z3Ue~umCM)q0HHB(9Wt#sP%$Wlfgnz!jI=RQNMh-U3)dKOVHuBM_)|0WFWeM zlxvT}T-dK)`(rFbWLPujC{M=Th_`{VCEEWy&g#k@KbVm6Qi)811TeT zW6!}B-m#ekN{cQr#h;(NFYAD!RQs!C@1x2a8)w^>QhHG+4K{|ZzhWl0KOPvK5r4uG zKbZ=2y27NY;A}f)IY8HjZC-GUoGw@SnC`*f1QCcUa`W=Y|IBI0a_G29CqrO916K$X zM(usjwhcE(b|yCJEuc!WQiG}c*w{Xn6|!vKaEyc1kHjF~ub9TLwu#uRZJRjAlLf&w zQLG-9@3}5hK7D@_C`pcEy;l&65&gZwcl1E0M8mAx8vQh{&hzcjdRUdGA8k#=!dDsi1zEY+85y!Lpw`3cvr-mIx6tV+c3_6WA0u?LHPew<*>dJx z(ap`npLYrl74kW~Vh%xjNCF($xcg==w)w^)vuO?JgoFlz5}DbgG6fT-M3RIN5g z;L9Oj!>q0dRX&vD^mj(8t=@NiU~Gtd`r+JGsuH1Zpyrp5t5yng|5FEW4ETSR4M(+L zFT*gOl+h4X;CBfIyFp!$h40N&l^jRByde!70c6Hy$BUs%z{m%Me$ocD3~hA_2=xN* zCl>33$?@_T9HjS@kFz5{=i&kvNve4({ojt=nxa{exBEsv1>TV+7?mh2 zf<_d<3G~=-#m{n0m`3H3H@n$ajC=+?g%4abR+KTwRZr1qE&?T^u?2;MO|+GjnY$St zXEu>1!|A-mrG1e|lr?6ba8gjcGY4G@!tLD&?&F*prj5nFm${S?MM2&%Qr5=U#NuO2 zL`HINmP+*pCI?VJs{;{h>AFDv7B5(g&qr+O3@C`An937$8@i+}JeG<@rn6h^ZmHoi z7j}Gn4DI41j9`O(%t_dox-xPbwhhJF1duJ@ zwkrbRMoKFiKc=oq#}b-~4{6ZiX~a+Ce1K^LQ*T9M#o~zHM{6Jy1O1BxMXojD+1SnE zXWJARi(C=sJRDCO7rK<#rl5Y?DpJnoW{!b04ca&bJQZP*V*D-=Cz~$8{1Rf1Rbs_E zo{@rD|Aj-nMFhqWT}okhG>2%i*88fZxu-m@0Fx7Wjj3gjPWu!&f9N#OHeVUAhL~|a z7sdABtL7xe4cKc?HB%KFAy9|Dnw1+ey&WFH%mrrS|bQ&`U!yKZz7K z15nr`dYU{$0KKDzWp-N144)GJNCLjSBkKE6*@2&5|Eq1Fs%>B&eDs~nR*4H89*fkh zjO=sw1nUet;7u9TlH%gAB>}b0YErTwZtdeoqolLtiqiQohguqrX)Q6fHb9!Ra zJ1&)ap~J4YYi0F7R zAY+zQZss}_+l(cTS6@|j)rTA*jbpzRhw!z4-k%-cU}6T^Stcfhh+Ud2=t$yrfl2^Q zBGOZ%1f9qRg?p^ej|;^SW)J%|#E4f& zh-;vzPbJk*Mi)PwiyXnj-yenpR z>ZV(@f1M;}8Gg7rM$4N49;T3f{_v(C?-~X}2Uo9))7+E!U@XN*Iv6hzfVS{KjpAtx znrxjYknBiQ)YNU1hT31?=}87Iy;F&(K?!6*2(Q)@W#Oo`tF^Iz52t)qBnJqXph_^l zrJ^xv?c=?@X&Xj(`P#S%5h(QIgH)^+4FDNsZ*$buAMbRUB~gp?uN0}*!sR7LTsCGHGOBDg+w;35B^{a8RCZ6agM zHaVA$4%8l1B7qC3+R{~oIf~OboAN<2X1223P~4CvZQ5C6N>K}nt@s8*VyZNwQub*+ z86*EFFs+WlfzA^I@Ftja&^*_NYUcsY!16vye3W}qdM3k(s5H^#3`rQsVknuU1&DX{ zYZ`iI4R7!e3>D)b*wp;#(*V);SD96i!a0HH5Zms+9Fq`}tt$fH1~`<oJdlJ^`~x9xRb67KglGQQW;iuxpm9Q&PySm{L??U?fP8~wn&6kTGZw5MTe!PPsHyW!U+4IR$e zaa4w&!_4M&M39|K{{9Mbm9%@1HNX{EV?1ae>o*0Wu2qoM4~d#%D^nDtBO)q>#p68- z)<`F5)UJD8_&6=SkRAmEQV}TmVUSMeW%cWk-S90*Ac2=a?A)sSVJPJpQwwlD0iY%% zR<+w)NQ1h@9ujw{8v>e4B61GbJSN#C00sAMp7Oo#F}c4M{YqHu=;Fan*9!H=c?~0- zZhkh7^SEwoD~k@>Trs)f#qXa-$9W&sIKWmJvxVusytTHu)pX!XENthKgWE;8%#~5Y ztKi|zB+UCDy}s|IRlboJm#MDnOA_V3`5hm|s~K6ANK>Mo%igxbTWDo9xcg4iRZe2- zUaf9QU`6fM!x_Mbof^TotMi1q-7U!diedkl=TpYW6W3hFL8&97lqcC>z07|K^0#_W zb@Bov-PnKg$1=34IC{}^aV_>S2rW=SQgd_zz@$8 z1-O@|4{f+~?9v4{nGA5$xdxf)1)&C*8_KdJ<g_9zBW&ac17U{7WRsPu zc!nH(NBq8(VjY=6{PdOLv%IfnA?S)nj`f3dnij%n^inzsiHYWM{kW@BXYZ0BDbM)# zsfL|0oxAxJh?qmDo|r;oGD{BU(yj^>+J@is-1bhPb3A_lsQ2NdZgRI!Xk&L9VriwA zr|+CCzT}Ecp-tpb)PMObceO~fpm5l;uuDD#v^ti0UXVz`mJnF-6LF|T%;O9?{p=GH z<6~eJpim0H_w<~lB}D93wARrOMdlPf$d}s64z13YuuChK>rGr!*)sk0C`DMt&u|p` zJUTF3fRQV1imE;(wery%aHvO6b+^J(`agHf0S(^gpE-@20A&VAxEBuW6DUR0!2;o- zv#$by%y8VExv8XKWItpcb@I<1SRoQXe#kyhv1HU}nlwr+a4J z)u#r$LNYcyb=x_T=>%wYj0PO(!MSKgKL6!e@y{0M&aUPoMdr+j)g)7N%)>KxJT1~E zzQ8fWvQY!rXqcp~!mpW8k^uj>CHY)7PvF?X{Pn}Ip1{_OTYt`-2qCkYk+f9dYC-Go z?6{r;9i+)>mNRLkvxisKvh%P-$+j9Yd*S-FP>&6$y%MZc9Qft@wx^(T2nT+0U<<$D zbM9~E@A+Es@ED5Bs%sUEM z#&JEoG7~0Ci)p`9-MHSJXFBI|WUZbPs6D?{gVL=_^l<40H^)$InoU|W5;Rj<&ID=$ zgH9C%J(l{Lf!Aecj&?7T88n@FWD1*=F1MoKV78_6Hx`6H^=Uu$Cp;bp-{lN z+8KI)@TXG-SP;D6yrw*3B|eIgB&bnF>yE188u@|;3}rUFK^fX;Z_q^bGF|Dz^jyv7 zj`x@u0w2fc^0+U5Y!9yINXZG3EBQWbB^v0MyIJ7-Kusg+Iw_0Z2M~=pthutdus&`i z^a^=tY-NA(4b!&PROb_3U0#n5qVzdB@^BfQPRc<~kqb|iUq>9DC~}Q#o_%ys6?8z4 z?z>M%BYE^I$owBXP7?vu`5j1q8q7|qcY9vQn4CPD=gKARo$C)D^?vc>H^;c z2u1J@F3JH~{T%wto;l=5Cn~cSO-@pufq9ZDCBo4f?lp)L9-jH<(cCV8`m^U+JxI*5 zsUO)3dZ9Fr^0rik8ru7Sef#G*y>Q7ruH+EQM=A93;Ir_3Amkf#G1gR*51si)L?y$1 zEMx72KwC?+hv=o&x&i{Kaz{aCN32T!rpW2shKF5JQ zvpNDexJe_s30%{^L$&6D#2dHKf)Hpa$BBGb_b8mRF#JUPkwMsgxwylMqj^3;Fq3mZxjDd{t(BvVe4#)k^edboi*wg75Z!R_kNUP$q=RAY@W#lC;c zrvw4g{bU!;wvDmHZDT%@rFG{l(^a>W?9D^q@?RSu23+6n1@vb21)fxM7Bq(qasJmJ z1#cMzRP6sQFE+I7Vfx&_LwYgxoF7Hd+({dre&gCqGQNcCwY;LC;sf-Shj%g|!<%D0 zWb}UEgbSjfRAs2XCteq)EDcQt`Mp=E>2&}3z2FWRAQ_j;+f2_cxNp+F@FfxKjm?t!bv@fvK#4TUlq zt_AV9Z(1NT4Ulch(mj!#x53nVx1n&b;+YAWWFH8k=5GhG3eu^{hmd5@Zi<^Oaw7#gI+GP2Gt zQP@qb`(p?82$Na-TwW3!jsH&XJmSL%c|u3}1k3aq)yF`h?aVIo;aV%1GV{iGkx%hs z(C@xNmYTmiGN24QPSM^Ue1hL2Ji1K!NRcOQ8IW1Rjbb0{A+7vvTPlzJN_~v_O05*> z?4yL_UVsAm&r(Xls@f4OX{)`ebAYL(V|{Ypf@|49C)V*fa{zfa?C^8%&|$mxwf{~F z`00|954RQ@N;MZkwrs^8_~>Qm=a*mSK~}`(xh(@D=U+>)_JtM%1AVlIr-^fv6OvIT zmj1lxKI)19st9YZUNx}%2GX9T6m+dRTM4fJ9Z_xrHgGToqpy@yM1T~*=*obD=3`n+ zsjubVluZh+EC}`7DMh6#4L>{{AuQm){JRwXRMliSB^WCDF$3(U!U|+o6!1NbgKC98 z4wuO=~QNhH3?}KKeHo@Zi^`sln_BFD4s*%pGxvJ9`<=oGy~rMceUOP5Zu& zFB4L;@1KMU@*n?tLCGZ?YmsilH@(R=NP9XMq2CwP=ulWNo>*14wMq9RIxoJtBXX)ksZ@F09GlNNsa$HBN$N< z4b|Ge|5*zh?l6QpWfy0lIx*$5j<)44I#t{BPZsX~@72igG~nH9ba|0fAlS8#C+}9m zkPF=MK$#m3ka75**^GI>tkX6h#Jf5r80cjsn%jykb4k1g^$bLK=HmaGQOTPJd-2J! zSF;V>7*M8vxIInduoKuV--AS+XPe&tyss47dZ-(m2}At`ZOU1V=JtcViI&=D;}Oz~ z;)&lBA^+W{VE-e6ht0xFN*u$&3-y z*GyeF7W_ydKIAfK13K|4?WK?u{eRBehcyRWncyat*<@WhvZ^*9zlxajC5%B6Z_?t8 z8{1KNuQ?!lK-UeGGQXp;7XEju1{BIl!VWd_S7VNH|BHTYwA6t*+!G+-*Rm9tK50+=BCYbBW*vo3)V;246Dg~_dTc$xwr`KucT{P38AIWp6{Om4;7K`8c%^=}iAG0tqOR%&m)bS-RCUE(!AiZZH<^mU-Eym``KBVDovTQcvsn& zG#GejB>1JsISZrA?l?nd%XHp1!ZMX_>EGVWU<`uo!{!+6mkZCGS^04TA8 z_cnXsO^JRa{g(A(Fg=ZP2o;uY-LNVJ3g*JH5qaUde}5$id*~rVuPm@!48`Y*%CvC0 z7qqq#yV>9&4ynN@_}VV5-Jp1Iw(o;dMy(Ghl>fSu&pZmirg;3|Bef+6@)ay)?Y>$_ zAQ+(>XAOU0PR;=kF109seARzvqVQqPCSt2PL;881`Cp{6TpZQT!=KxdpP7V}xA;H) z4dLM%lGTRXm zz5d>6Eb{#6t&MWd<`2`oQcNC(h_EKd~ z|Kow!9HF+OlF0(u_WEz*`kxaZ)MyteedQS(`$E&xxV?JBbYN9_SW{|4LY|YGG_F`< z@%01^O{>h?{B`fcZT?>eoQwtea#C70<;o57*P;;OHgd;>xqz^ zJEs5loRoYD1uC4_P?iT`9-#ju5JFwo=Pveoj_2<_X!jC~# z>3{wW29d{+IK~Cd+!U>N>R+59?e2%;?hC@3FF)?BbYo|2WltaAIDyTQQ6la&xh~!;wjDhS*T~3-|h+#gaIx| z7N25uBmNaLqw4$Z_5TT%1105PS}Go_Uu7Xpl#t7A{iFI&K=-eAaBSg2+-YF1TU^Ce z|L>wc_er340&icKJTs6} z0Hm6)y?C;!ske$Jd8m{qE&ti#fs*VGqfy~a@ie$R;|f3Q?CB?@GJo^sp&#FNq;IEt zJh7X#w_V_R56C&uJqmsl)+i^*!T_rmgJjhZ+0Rw0zcZscl*H>mkoH*U+_U#aOen3_ zae=!!chSA%AcxSA$g8+D3yHO9aGJ9^yr`4pJW?#oGQak_NY(H-F4Mnx|h=|t+$N}+g1`cX_yz03ywJ#XrVzqc6O>^SD*d1_pNf@wO>k7r*X_HcfuO&A=@xu44!kLL7%uP|-X`5Eo3p`o!?@aAw?jVYnCbbJ(H z<(7k7T(oI!!B76KBd0H7qrbGcJZkl@jc;<=Z7Fc{*gSj6$m_VTwfX*c)xGkko>9{k zt)tUY4d2?pu`Og!rxn-1tyPAOm8y<@X_$HwTBXfU$M!*~@L_M9<6O>Me9BqA{30;H zYI2OK_WW-2{%*zfZ2Rf;ETg!T-!GN@7WC- z$KL3XpoyrOno@S`ncjuO&6wV8nNFxP_}>3MyjO2?Kgc&U{mqlU#_NLm{td#!<8PaH zIfBt564y_!S=A9_FP`Px)ieBH)cEGp&O~(3FLB4+u}e^uD`IkE;Pr0rwy?@Ogx_&l zmD6WXWjoC(8wIH%jl6f4RMgz#;_b3b+wc86zdyx(`G>wgMbcAg6RP|UUY)IK_(EO{ ze+v`8?DFi6k{uP?KyQtD4HAME%WpaVUr|>c5B1i@Co`5w8B8^mn31hTD21D447!ML zQ;}pyU2bJvHJKcNV_x<<$anAXC z&N$(kpN7=dOEDi<0$%=MDOdcpAaUSrp1~mVd z`iW-c=M33VG?E14qNOL*9}i!$*;QQTZX?j8{kT^CB(OcLuQSVFPO`dB({M4a?>5%; zY+)hELLhAt_4WNGd`1vE3f=Y3nUCR2uT{QTDY(*8;%-`}Fd|td+icoEZqZXy2`;ySqx>YwWJUqiJ^otYW#~k6c0hF-c zkvPB6RR}D@q{OA@!I$$fxmY*0_zv^o$jIr!zxEf|QWvtzixJ~jv&_=1g{9XC37s6? z&{;>qvWQV$GGpvd)!s}tczkb9W+&}o{P1apyyt(e#nXx$*1?_H z;_KK5s+L7K(eGo{W)eY@al6z~JgL%&ULe&IFSpQCLp?n`xh#g1#pRH-9@o%#Wy;}A z=i76acNT6c4+UvB_1^8#3RMorwz1nH@Ie9O6*eL9lg&r<(0ja&yE-RIae^K&yNM!R zLBdZN5#1r~4Iqm<^mk-}5*%m$`_!HGrAbOs=M=Jx#A14{W5<7F+;wtaZ zP_L(}&(BDeh$+$<``{u%-9K#*_X}Ih`LlsON$J_IeRCkMjC)i+o+5j?q(cL#si~?t zdD>%Rr|fR5aVU~hGg%jFv9eKzbJyFD!u0Yjcc-`2?%$Az(!)>0E6yJ>tV|jzs~La6 zQh`p;X|a%DSv2D~K^OOuYpFC}uP&LJnM=R76tuc==Pfa2 z_Eh<4dm4=f*(pAr#?g19f9f1t_a)ai5*o*2VGW#~V`JMjefEgE!w3&P&ZHKc4>ei1E&ndqrFn zTGgV}`s%!Dd}-O)8kL$++)NAdX-W#z&IUR6Rf?X5LX>Q*etYd!)C$TH(U;|$Ti3nV zx~zP^#`G82=CN++oQ9iK(sHx_z9{*<$cgstSlHuo0_Oq5nO`om`tbK2O6JroU^-oz zY;<9V&5gN2k~pz;-T{opN*27ng;0G~R9)hJb64#n^5ypGC-w#3TLSuXgEa#^WLHCg zzf-c(o5D!&?r`F-9xm>8-j`e)C&DB$0NG-INw-S%{#5P92^rxbo&OG}MU3J)YpeKf_#8kc_h>S|KBEQcwY; z^J-Fo!dJY=avZaZRg*vCcYWl-)yX4>Z~km?H?!FIz+`K6E3XDGsyXyX{*PFmW>hd* z(_}_5Ym2Mj1n+c?2_r#outGFz?p-fhamOVP^#-io7F^%H_?f}v>m%W%7+)!MPOT!3 ze_nZcr0$A=?9s6D~IP#v3|c!e^EnY(RbW@{KrRR#N8@&3eGe z`qyv%$pU#pH?Vx|~u~SXkHFnIu?b3N+;&kx1(JHrGnAcAdlFwkdm|Ldt5km!ETQ z){)^J)4pG0w6n+F##t83c7uix{obX=KUn_0&-=%C<9X{?7qHqj_|u|1iQmuKy7xTAS85y4CD()jgCSS~@8u~NA|gij#C2F{6Nf$g&@ILDYnpnzMG z3Irx3Vr5KxDGW;qE78g+a8FI|Vdhrd+k-V>YJ^hnO21Knd=sb@xnz+508$EGtI3M= zGZClZzdnLTAOv+5H_^Z>Nyl-Y+^FthS09Y9%(5vxD4uCYKdt^~V`z_DH?A0+Qq-lTzUM;_s?5yXbHFXPL##_jRrnz zY6<-phB0)n*S^k9E$vMVyQ+nDR7w~^C!^l5C=PT@(yH>!VG zNrCz_MK_L__il#KU3yz?N+al&&4G{QqJ}R8BtQ_?t@ak*PI=h%5?K*=1au+6I@lx4 zzi!g&6|UEuJR>B3d5T|7MD`NIB8JX;s#>!ptSz$IDehnLXnQ;;xvz%K+jlr}tzx`U z-gy((5rf05=X8a4?W>tDne*cGo8^4PY=89f){|}&G%0?Dd%>6x<2G<6tl=2^qUxs| zFnauqO4oP7DjG0gZUz|F7k$cNZ^Jd|EiQbEr^@ZmFz+qej(-@cdZV`6_I_$)qt-!G z8f&P0=t5JZ7z=bWdnwX#pv1g6!1R>OBYWR_8(Y`xkwVq@0sm_CkA^pW-jxII!cfU( z-c|1u^tP4;`$rOGEhbC?NQXgk7zE-4R4GwpH~ULYrj9$dDs`D6o-u&#QA>uWIPA(k z+Em|2^u-K~u}oV#m1|^Ud_-t9%4}LP%>=AN zMyig4sZjYvb;qux2V`;?BZD;`qM!K#v*wKF zypaIK*^I_%&DX^^KpF=83a|kwRu_{IJKna2yr@XkaaUH`a&z*j9KA?Sic2vMFk!SQ#?sevG1L;Q<+Tv$a!HQ2h46 zw8vpNruvUh`n0}wbdvwL&ZVaOS_=-3E?VlU-$bXfCF~&sdw5vEUO0!Q7}d}3ywU06Cl}Pb60)ny#ZP=rSTe*YGNLZq zB@~taFkA*(*)CybhAQrDGqB?Fc;D^>Cr3(nL+}o5-B-1+?M{2pk#mLIGh$ai!7Z;| zq;wLgo-?R6n;v~Uz*1$baRn=R;icvl*7)oGwaMbtA=>OAZeKbMQo~WmLO4CZwoT4y zR_CB6g3>x+y3;VLWf1LaS=gXplIjO(y0}j47x6iSlx5U>^$lCR)(+Lh5m|ibTb&(K zQ>C?*Y-(1xT}yZBA`@sq&v$MSug`ZeqMe`|P`A3HZD^?f`|zt|_}=g$({XFp%c@%( zXCyUI)I_4DE+b?1TmmslxhGomHUuK)7b;lx!(>B(%o%wGsl&DW*&3?+>26uBD#s)F zr)1pUD4-N3hpOy-lH`DJKtQ%a{`3e%odcSVH&>=WX{m7;B`plT3}q+U*RM^u6J9I| z(9G!)-;5XN3n>c?`Bn;&N|9uw&=UHfIAO`X0R1VRm0MwGi2zv4$V<3)^!LWuwIt1Km9p$7O}yObvjZkFvi7u z0E7#&_)~%s=ww1qW%24>tYlBzid4i?*jG!5`}hk<*rWodwwnqbFeGP$qvmu>yIa9S zqY!F!5&Y8 zBPYn5+m$gY5vv==4;A1{4w(Jwq|C!?tpytoOts*S#rx$ z^IDya_vB^yxS&kG36gk%47>Z?GTb(hJSY8drAMtuTl~#0deIVb94{YV@{?5VM}v3A|M&lsRUg?-z$wCe(igrd{$1}iF0S+7c%RCC zT~&2Wn|d(o{H;31D{t5p9xiV&o literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_map_autofit_v4.png b/all_static/images/migrating-to-v4/migration_map_autofit_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..3eda2852a175ff9be6f3d33c0335dd3caff6c9ff GIT binary patch literal 48538 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

    6X1l-iGFXqmOxUq* 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 D^K-_; literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_sankey_v3.png b/all_static/images/migrating-to-v4/migration_sankey_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed16c08260d6a4d174738977f57be79cd9bfa16 GIT binary patch literal 69800 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 Vvi~l!KHkH*0M>so2m z{WaLK0Q?YC1Fbs5&k7ZyZUV6ud<6zuJ`7Oi?Vyj6@eqp;Vkdjrxu%dUhiu8FV)4#9 zqZ^H?ok&H%m&-7lvj-l{#~f}v=TDA7tb$`p8MO|`2+jpp(_`|_#dyU=2+pPb4NVp_ zp5lu)OBM(Jrs5@#RB)>KCD=byb!cht%f^8J6^KK~7YQ_*STiG3*!X*vKRs1f)l8F4!+=heE*b>Ycjl)#*$*Gt9O5 zJvx+~uwdMhdgzLZ>jxZ|a}#?Hri_X?<%wY4oiPb3%kn01KQL3_B+b-nf3tqHMn=R3 z$)r!8l!$4`^Wkf^uq#i&@ihbyb145! zpQ13aa2tV`4ql@(X{4Gg`hzDidIdq6g2Ng^GgKYmIq~yAdX5UNilTc0^+XqYZ~I3~ zbu`c_R*bFl!Gl<575t)>=cN-r0sH%AW96mpfuXT+@Ilk1_!SZe6b?8 z|0%VAm4O$Hn*neF+)r;1WyS24h1u{G4qhuEzk#G`v+blWcmr;XmYt4e`#=pAt! z42V|@FNpem5q}L3Qgxb!^gk%-$3IXy#t2z~^G?;h2U6}tT--MNAs?}O&*2u$p(hde zfnpAzzeW)lDL=df;)DI+?5a!=lq$Jhu>|E`lrPsnx}r|R5L9NK?f;WN0srQ z-QMVhQ?_?Nn@@c|7PD8FX)ize|`<@nQM}lz^oUy3ib$Z8IKaP8+zw6f3klVU&rF zZEiE|e3AYE7A1%P(rLODLD^A>E7dYnQ`d zc7}ep8Qmq~qdPo?c$Kl7Yb@Yh!L=@9;PQZ4ATo@wK z9LR>DiGRT)|INa}4`zUgPwQd`3dd*R(bjX_Dl|36bRw#n&NjNPJM64RjI6V|ZJ)iB zYPD4c-p!Mh>X?xehCd;c#)p6742|FIS05Fd(iZ$iv8*m@rfa7oq9ZviX`pWQDQhab zDNk5!0ZbIl8!R###Q+h3)Nn2(D$PZ?34Xq4%Fy-vy+AZ8;`DnmyC3Eo1eq=}a`**i zptKm|1FFRSEKGJncV?gA#+iNC5fDC7CY`YY-8@Fd8{saTXy@9#Ap^H#lFuO}BMBm= zjorss_pyYue9PuZmjKU86vj3u?&Yg+8~juVv9YK^2Y8Xuq-Uq8Z2!Kz1Drt#)M8I> zT#g6$9IiA1Lu-f$so8!Jy?GTVZ4S}vC+I2ujjq7n0}>i4;~-?V^+nUFV5=CmQ3VmT zn|cipV(k+LPY|}&KFz(14nu?~`Q_&Ga!K#_Fc4^nh<9ojYLZ!NV^hhGRD<%=Z5T{J z6+3cWETYi9`-HQ27iBsXKk6O{%6PL14ATJL8$>eBLzohfP#@V4oQl<%rZ3wCN~Dh z-i2Vkt7S)H(__`GqxlSAH%Htb6knX!BSnh-QU#2|5gaMrKlCYWMXiy)!*vE`;}T%N zU_AtfYQX{Z>9J%dt{?iZ7mr~>;vw3`>~~13%}&fYAd~^rpu%jex>FgSQHR zUzS~N5QWrE6@v2(zO&C!rG@X?4WcXn2q=E@?ti>AsYW6=W&-eYf#cI&Kc0#rSsAUW zGCqVia@#mmnsWBO@G-#{@DcOEyzggobNY*c!%_=+H8@C|gFtKJck3uFkdm;6u=j9f zaCy!em3JL>KL7e`xE24~L)!9=550>0^|p~mFE{S9$O^N4HY#9>xd@n@Q%Lpr>6WF} zX*edWR6oR~Ui)Iy-tIk7_4k(k;(P+EZRt^0R~@sN&UsqznG*!iiAzc%5sJPqe;Y1c zhga!{*QVX)kEBn5R!<{2N(e-cY*Z9LwK`^i5>rCJl=b{o3ZoDlG;IT;{zy3$_3A2Z z?M5VgBvT|BOg&h+H@Me!7T!;NAt5j~vdxA6%gJ`&?A<5u?=#!#H^q$x3fX#2roElp zLKicn18MgM1AHdnCLs)-%DBOt8hwbWEptla>^G;fL2PN8DsM1aJ~;J5=zG=R7nf)V zNMkJ?hmBP2S9`qnIfqT5*g@%L)Rhs(fZ+;$mp!ypR4^P&Jvr>iSJWZIBvOhOSP+(3 zv=@gxTK0UXr=h0CYr&lZHZU9Im-rLWTGhx)h?J3ht8B z3F&vjcBL2>93Z9}km1urS_NDQ#kZ`k5P%lF>vO_NoSn)wqlANaPh*kHHbn@LXY<_; zzQ1Eg0J}TPFc4@jCr?MoAJ8}@?|ijVc|qh1wRikXCr;p~mRTGq{Y%B4%qi7l;z=9{ zCM1i}U5t-?!qWU;%a*ugW1%NWCeUHk^ktZ(agiq3mX<6inDDEducRFRzvW|=UBzEz zeROVgF8B3dv~M-HCP~8i_=aWmvQDjRfC?1!Du_w5+gzEV;a#BJePwl<;SBaZ-ZX*p zF584B!eo)N&Lp{JHgtVNEN?nQyGB6Pl-HVgMlp5Pk!TJDf@+3hqpGHjY5)GKiuYSR zKPeDPp`#E=K?59@HjD~P-c6O^35~}m3)Xs0)fXD$5;lS*%PwcmyiV3#%Tmu#OGeVo zi_oQOxk?H6`*434``dQwgSm zSTNKd;wi^APgyhqsQ?a(SDA`z*TxJkptNkkmm~Cx^s1lb(&Q0&kx%py$9G+1WWF0WS;qQm}Soi zE>_#tzc@0&&H?6ElLgXJjPic;7ZS)RIP>ew?HPG-gzV`3YKk>~M2I#I4&l8#AEg@L2|0%Z~6w2yWPPcZ~ps=}eU^1)$KUAsc zUrnVgOX3Cpt&h(<4z7`?+3;p)d11#?JXNUhZ-f+4oGW!)cJ0aV*sdcZmqeXTpzxap zeWzptv0DW+YzvW`3+fZEPG;D+M95VV^KOLz-uz_q`jZ#;Rf^MjcAr#8f|*T-ON+M1 zk>}9K9i)ca&N+lE0I>q*Q zb5E+3rqV<{*NMP9olvorKWrZiK7tVVKM|(0CN~)ndKnkkd{1^Myq9W^(Wj9jN?`|? zBXgXT`hcpQhmQBEK{bvb-;9rQIIqyb;{z+V4IB)io4I*X^8%``+k0#iXW<0-cAtXYlYVsKk$mnqS zj=w7pAE3VLRWX)OYL>FXH7*EH?3NWGE$FN1i<*|@G^YC<6NJrodq@2mdp+CbXJSLc zF{5q!Bg0ir{>T3gmsg}={8*!JWs$tYoimphTt2N1-uwo$w@P~vUnsi-bUk<1x_eF5 z%w!yr)Zb_NmHHF6JzW!G#}`U^B^Y6263axv`qKljDni2_$T}rNt!}=P>zS}mXIA3R z?E4=QWktRc^Z|ZNW>!t!TL%6BIfS}Q>r=e?R$_cmGx$TaJ|c#`tR08j8S&YZ;daw| zo5mRvcWSd=JSRKNHPM_0LoKINO$|KwFzzZ-YAg(c^UHfVJUf=)&~zTc*} zC=1~4D3@~d<#$%fP3@+c{F*T45V;Wkx*_pgBpm@$qQR*xghtXzt$=y!A6~F|9G1gN zK6lvndW?L%!*bLK(Us1e?Zb4?0H1Hc#Vrzw2}s|X0T+wP+IHaMXmz|AvV^bxNZAi> zzpj4MDI)3T3MjA>Oh!j(*Vwe&v?3!WUGbeakoA|z)s!*QHsZ6qvhmfvdtfwC3q*TG zR*<&Iui8~E@wEN+CYAt!HyVql+zjW6%C|gCotTvF_^>oGy|avBG|Rz6L2282#Czr> zzX3S4)63 zs_y6Cdj$I1tnmBZeS60Cv^Kz69?L)LaMUEpv8~u3-mSCyzTwI_=)>wb>iJd*Rb8~6 zqW+t5w#A5J}(ssxUN;lM37QFSxe$%n=L>C7#b?i|JT{nlBH-HjucoD}0JaT9g3p;VE>5)`UQS#vCD4Y3(q@&Y?lL^td^R8Igd$g zh*c%n)${eI_gFptT=5}62FxmNp>fPEP59Q6r$UqD{fZNIB)Vj{$s^|ki8093)uOjO zI5THM6uGe?_kS+|>^H|-_g_wXa~dj2y;xjYf|Y%fCZ3T9itBYrzKdxQ@#7SK_ZdL*Cv zc{JZ-oCPb0K2v7|izqYJx;NYA*=I5!{-dwKM9iGZgo!=+d7||Mjv?P<-U}f$*TfBm zwDMBIY-~A$6y<>sF0!tG@<4}$BQ!tSq%<^X!7j7MM3Lytx5{O{L_JGD#rZ<4rQ9(4 zs6X49rY7k{%z>ixoHOLXB*_-`{fhWZ7@UrQuszn2{~yt$OYtY+YEkIdd#i&xr^i?W zkgpg+h_LEnypikodJ(&XNWpWlCyTZvF1K$JyNYIpQm-pK=~(SJolFv)rugo#I){if z-M13{Q-8$E9V%^6K1%(qv#S#03dQSUDT0(=Wxbt}MNpc~&vs2fc+R(Ypnfbz1sLn6n{raLmC?_iP5;g*T8qD0V>=$%}BfT4azwA7W37xUt z3%9lXPp}#e7ydw`TSE81`UO#bqSb%itGM^_R#G=5E5G1bJrLr8k~_`0Ni|~3m)8n3P$oH&En!dZ-17n;wZN7C6DIXasY=)zh9zE`jU@h$h?4k zm>_>gnFFixgqnl0Mj~onU;7vws9Uuv<%MAEOG@D0nlORx!4zp1;~rtTwci}5+kGNM zCel1kimqPUJ|}{Zt!(a8x87#(itID{Z}YrRJh8D?-&wt9YSg|(xM~)F{pUX_#>>E{ zg2Jh89T|@JU$giTA2p*dBW`KXcl}WlZU(kd`;4L3H__obLQaaq0bimc9^R7|-g291 z6LNhyGuXG0Pfd^r!YHSZUf#^u`Wj%N6k9)A`-!t;QkRiZ#UkLwrVPoS2!XIQ2~(< ziUCpG)-Rn#T}53Q-gh`=B)_$UZ#AB!|Hgg(*Z#OCm^<41V*>lMQA;Mlyc4aJS2wxT z?bB7q6(y%X>#QFSz?t=WH6&k~XL$J_hcs|FbNE|q^Gg{k3bE`q`w}Mi#0c(BJLQpA zGEr@eI7ntFESM76<8WdUu032%D$O8-0&Ew>oc5WpTKk9|)R_$VLjqsfC9GFyHMM@(* zYb`+dq=SA+)VjDTW7VgE{e&lhu2&aSH1-p{$thW)pT@^T#1Up3vQ2GuXW47 zZ-`BroHxmEf2u(2ZoeFTj;^IYXA03Z0v7nUZXbv4Jb~fNl2=47!l>NC?`P|5ZF*ko zaR!JUdL_0)HxV*QhGoKl!zAz}jlzI^@1dlr@YJ#;%bSahFgjD3_PfMgtAs=fMu*DJXYWKN^cd-Q>kfQ=NPJNdqDRwRt9iw4>Avhdo z+u99hb|PPrEsn01Lx`Cqk%@SN{Wl*XKRjwujj!aM$fh5;I(%14^#`W3wBaWa^%q)3 zMfv;+Dz0v9YM62Hgk9mAJ25FbaPr+?T=w(wS3u4^Lb;7O3$YS zo99@E7u<@O{{{D}J1QA~4U&k>VjcdIEFxavu*89;Q%&%rR^?3+eQgPj#C0V~6Dx_4 z7m0I@PNMuF=Kw^^|J}}2&QS2J=67wC>o5EUbeP@1quac*<axz0n9jvkuZN2ZzwhC@`rJ-n~lmB-|UL)wr_>JTRx-mYpVneKU4V0 zM5|>h=kA1NW7DDc{fH_%3OgeZW}3K3Hu=S^1}wY7$!G@jZ@4=73EYA-_P2B7<@>bi zyi*+@{@5Nwu9C4}dOQG3WJqqQvXp2d)U{}J%6E_M9~cqcOLwDpZFs_!qo^6pSP_VC zaMrw1vnaIHDQ3+3l6K$TP5U?hX(rZTtsZ!ktM+Nbo5SX!;mhbjBh&0na*VL`?-}Cx zf2aygt;!(LbruL?NZ29sxPcc{`cSceGJEU8`V>M|I;1%xDoQef59u7+!(pL>bp=XF_Wbro)uL-ag@Mh~w_D27U8yn# zvaXRZB&V$}#;k*6oi)25WlX8~Pj0_)>*PVAn8G6y5^+DvDLf0IZe2itR;@c05L{c5^t35xH`x)w9;-aqS)A3*PX(AG5>&HW$E z*5a%c{SI;T3xvyB45Lc=>#1TG&GF5lkg}9hiNC3?M(L@-HmjZ3od&tkehoWnUtkX4J8c&EvKh})z{bUtCSw-!D$FVcFaNp5KRO6g)I2guZ`baF; zDaZy~Jyj!!jniPIo0W#wUY4%RMj@41{+TnO&waOe;}-+JCZF3FPz95b=WA zq{)tnM7NXs`*RbAbF6iflvwI2$_iOte3W+{p zhE(#{b(e=ROf`Tg}T@+_bbV$ z`JoWVG#{h7N(H%=#CIRZCA!iXIivk35Ojo&i45Mv2@}VM3HO@;=#xl1W@KbF8F)vC z=86W1nWWd}%FpFLBhXV;Tt>OVpUUH$w)dAt>Jv!#p#pt$-r30xIyUkCNzxUzS}Ka) z!>$g`$?%w^#?cc+N^|$LgByr*ep;rp>wh4X?np6-M}-XOScS)!G%crFRHNSg8Wsen zkK$8duQgpNdPOyZxsn)sE%EUXlIWfk*QaxR z_5~**zNmLRwKLjFf9%JMnLSX&Zt?UT0TP{S zmbBR{=_f6NX!-)gXn~J=)^^1O#&}=5ZSnN$IjV^UhB?8ZpYT73FO-2z`DD)?#YOR` z0$GA2(25YV%x`~2>>6|-j%R4pfyuU2Kmo-+rg;G5Bb>r?o}4SeCk#g}hEF{DJeKmRR-*#JLr@xJ~j zQ2k<58)V#T4y9#nG{`-gHAm^;S-!#^VbDBS9-TjdJ&}yilGJ2to{CrHTG}fDOFXQT!U2dQbyN7y^wfljPP(w@O zMa&6wH7s58Hla1ckv}4KKCo>sq-u5whVv`zCT)7ZR0*OMh+(BVFkY02n#i< zNw}5u;)}kkT{2xvpx8?xb~_DfUdMPlNczjTRdvOt^|zi%i>l8R#JB2dg`tx=Xhml@ zI5MGjdq8Q+6Mv`tBI6K=l=3^$^nCMt^MsX@VPH4=3y4v%;lYEzEcnZ1g7jpw`aT1J zuoXK3-yb+$ui2*f#()2T$*}Y7=>z^o-ANL_+}^1rQA+)ZH#0#v4G5<7L1!3>AnKFO zymqF(iC~^jON?w#4S^7|F-5vO0~w^`&inc55(l3x()rv}DaW$^BJ%vK%U6BRttb8Q zyOaWqO>m8!iyTx#7z2i@kQh^|lFobN9@swq;HK)%{>Am#=8~ALHA8F73P5H}Y`0SlDt5{NN)MiMg+m`B>3}^1J$&EpZXibD%jgRBQ{4ZFj|M8;;jV10=_j zXQI~Uz9sVR!UdjG{AN;B*0VfR*W$mz1*`QxUNI>Aa^2xOzWd9REQF0PQh2M2DC=|C z_hWx3BkH1(sY`q}_|YZZF&|TH5T=6Hq>N_7NUi==4g^?`sQc&4q`=Eg&j9yTE<%Qh zs-&is(2cfQ%}0Gq38WZr=h+BQ$V-6U5pF8+`w5As{*Z2DWB7{y62FG}6>3}1UnbCQ z&FFu+bSC$?oy*S#w$4A6WkFxy!M+${I#`$1b`|aP{JK&N9x=r6kfc z`IZ+cA&5rcz@nU4ck~dnlRblcAJQ4s){bj52inNhcn-X$@(RHBF zRu{^LiO_Q%7!Rw`(v^6p28{3rTNMD|jS?$FW3!Seh5-TV8K4JJpM}vSXY=uT$t*7U zVtjnA`)Mj%BzgQa4)!PAoXbawF4OuKgwo8?!$?jXZUw~N=UNq8rw~dT~ znf#-O>L2Qs8YGNLyRmx6$()SDRAbHv+X4Ucg0{3RFt5xIy|6XyKGX1r>6y9Y%hsaK z>6?%bGbPqf2@ivUHbwd&Y7n+@nI)E>peRLF{U$qW|92#{Z#Ip|4sd||_a)sgxtizA zwvi6MWEbVp((fGC1h!|%44d~6k-$tz?7T6N(&(txQT~r|{>KERer<2+Ua2fN>Vf|y z-&V{&u`kOEB96z2gDGOhJ`iiRJKH1r%uB&tI8oROsGQ>(6OmrLwU+rWyoV`u@|*(o z$I-b(A4}6xfx0UHhrtj$juu9RWD```u_Yb*MEdZtvs*h{6ql4x=LkirJ(ptQe$S%5 zuQJ*3G2%l0WEXR#44L;7(ki)fmzd6fQ z^~C4-=*@T=1t5*sgg?v2C%f>bMM7{kT$>Iy$gO@zLi(Y`DK;vy{pRA(rgc#&JPv#h zrTekybwDjw^;{x)nK@~2W8;uS>L#wAb$I$|V$xNmdG}8FZgkya>)^*v>KWj1$G$x7 zA(?4*xdi5}pQk)MUX4Qe|Pf=H}XmByW7vCqJLpHz1%| zH1=$?x!flg`rOFx@et2eD-H8g_D}NIti}N!OG;@lKew(Y?>|Jmq#vQ@g$+~{+3z}; zcKIIIq=?FkKpK~i5ae$)I%=!ck)#%%EW6s;>g6KPTAOkYl%EiI>F$zY+j9SKQ38j@ zU5((m;sKPVg2GOn_wuD~7}N8|a$M&^Nvp>H<`*85o+o+JPp#dL;4bcNl)x6^jVX>O z)jGUw%&ev{<`+`n#tV|4NrVlMfL}X#ViK0#w(knFJpoz1atS=5I$DKPn)jGP;=O6>!XERR)U zF}oU-t^_l;Z;QKok`iQ>h05o{FnU)_tEWK>rw9oAvQ+szeUO`-E3#IiZ0(O8G5DW; z@5hD*hT6K`k>54aTF5^4M~?ay$mULq1%&N^2Zp+mR7E(BH{MYif5Za-M zGuBhs{nczSCnABLI|{TrdB$~Vh%EtS`1kCUik9HF)i#2MdtkV<$9Esv8N#ks{gzH! zu0udTWv!n3-P<~oO`0kdicO-cdA}M}dJBoV6eC~o0o+A&x#~-`*Z!^qsxkXwj~a9x zB;o_pwNMi=i+lfh=9MV6TXFc@t>p7){!jk1yNK!`Tf%;A!8_qHq_CBbx!`Bx`AFY$ zI}?K67=QmP%SG~PFDjpK)j|;|e+^f4#yyUPJAcnsJQeuqpf{5tWy{yU$j_GaMrx5p z=8-LTmK&go%tw_t_Nwk;8ocg#uU1DDOd z`xZO`QXfd5Mv%)ZhS4l+m-4&q&Sh=vf{6T&#v+}JP03+A{oOMS!CrmkR1L#uh+jd@ z&iCrsu6y)sV@nbAA4+q5^iHIMfbbaa4wg%L273cJ8U460Y3GZ%eNM~6rGf6vbp{I_ zdJX>t)@bni2KVodDQ4I9+*kWKfN1KIOAZTqI?*vBh_5)U7@bXW>|H$dn3zA)+YS ziWBWz`CT>Z_Jc2c+ILn~Q6h%#q{_0X`Iq{CL%iHl?NlLmIZvg=mKWX1` zRJTEEpW;70SO$~QgQu^7U|q`5Vgu6mXnLYP!z|2I<%YCR$z98yykFPY#l?M=qhEjz zN#cvLx}BjpmFuLWgRxT-h=G0lTy72ZPUh{zf&-SU$qoi5_17NcrdLLa)epoaclUr#FxkG5rjJ_coWd#^3tH9$=1N(25gMiwkwFsyeF-V;YrK!=c++laho2qlljd(`OCNmsh=P=JjWl@wQ2i+PTKHR%-3 zKN`VIQZ%E2Y!I^gEvB)NBls05(|wP@&A^?Qu{wkZqxWlz^RNTZR5l9`efL9js2ZXZ z2qzgj$QstGz2++tW7ddy1-Vq^<8{J51Bo9+l(q+>>${`o<~RSSfVl!pt~DXrnhj*6#_RYuVC>GG9y}Sit%ut9d7Gx zCCg-Gfx2HOd<2m$He$6&=2JBO+-Oz|Xh;yrc5!bK-pycn1u@=2LP$+>G9}Bfj@9s% z(M1Y01OxYH?AB2WGj*AdUh!w%F_o+cgbF2UX7`7S9J^VlR4b0n^{Q(ZjARstn!!J| zx84h(&gMoHk*FTt#ua^ZmB-2v29i-*D?`SIQh`z@`4wX`)WWExJA`vv{XXFx*_Jo+ z`+hEs38_?k?>+wEA6+h=Jy=TNY%uED+SU_bXF$Y$UCR5`UTQzh!k$uWqpkNRwcbQ0 zmCT|29z^usR-t>i)W3_zv$*L%3e>}5u@SYFdl1Rhkts)aUY9bjG+LaD*!rTC^r5~7Pk z5R*M;!@J)fa=DkdB2sI`?_5>O8EZrYJvmop%K6ZaXna4BTz8LRo@0=X=DAebWIkrI zh<{mznu4;{9XzjyH$>>RJ8yu%;?2Q}F*ED*wXaiEgKN%W=e>x&(ctTc$?$ZcABMXZ z&}zV@@*E>u!6l-k4ChkY$nyP>dSQK}?a)Yi_z|eiLdEFY{uA5JX*g=%OC%`?4Vd+=gw419 z1GL#3l|}$?tkiwB8G%X2a7QNP+>RSgbg;tA^CXh%;+x zzqRu{*^PqXd7@OMNz3?Bx$%s=k+zle7g&HqgfigLl7cv~4u9sWKbKF_HJw zDgLiSOWj$Kr2IJIRAQS@oOk1LS>;YKbs3*u=e2sQ-+9G>A=CQ^U$l>9OzU^&XNvot zo+TU{M)$2%YJZn3wr0}DVUsCews#>kNuo(&&mj)^DAfC-Rjl>U?-*CN34ZtAz7u18=ph$} z1>6%cl5IeatS_+p@850A=!tSJ=fU5`rHXfzF8j#>1q}kl6M9yz5VCiy;bVUV`CsiC z6u$SQ&JM1+Xid=m2V#$a<8Ss-s`GjOd}CAOp?0R^NB}kJ5Gh@J01${X6q{pI&AY*6 zI-XP7tJRJF{@6v+-w|6iNpWBEWAqbM9o=B=H=o(5A9TF7ko8OGY&|XYQx_@zu`F`Vku$m7zIw(4%Q>4oQ6@F+`KDN=z zgj+omp&0e&lwsi7eW#MVXV^6V#a(&0WkBu$ZEkth)<;0>ze9#Nj`P4&-*(dJ?KLF$ zJK+V?K)XBt0Fa|p?qAN@?Zf|m-*ob2JC8E%0Z3kVS2Dlbjg-2IBM=GD73Gj}Yy^W$}) z4pD*WvJb7*7JhAQD((EL$c!ZsGrvz@-nI&{N^+qyB|JqKk2pZ?vJ_5>vj$@&4hPH zpk3SaM!wo@->?5OTCsX@zUY=rE`_ltX^nALAknm2o+AO<_d@uZWD#zxKV0qHDB3)+ zo@~o2_mOeU_0QTT!_&oGrFRjp>aVEZ5%n4;h7@6vlo}q)ocP{T)22`6(`4#Y)Q>be z_57jy^dw@Xcfwc871)S3&t!NOb$OoFCA93h46c0M* z+P2j#n^984yz)M42Zm{2Q++{l0N(K?@Jj#p%m!5Ut*d68V5-pnI>4@~{X5WeZ&wyO zQ(p?ywC|ul2fI4gF0TPeubW^70n@hrom3LkbfF)lgKd1uj6qd1rz;aEF(&3{O2$AN z8Cdj=1Nuae)}xlAe3AcK_n1d){FBWM^ zIba=iHE&h+)bZ!TjV~FiL{wSRZso7xJdstu%Gq_;B%l{9JCMtg^x(H9r7&o!wrRYk2y zMEMS>a%D<4$v8@*%P>o6$f2{(aCI!L%H5<|$chT!R<0YrQhfJ11th+sW4Br|doV|) zT>W~}acBA9$!XmYQZw33sqTBF`_z?&`&R{DIt*|h_)RH@xUQR#>2q*|tzMMGtM2vF zHX9x6@Co)>b|=V5%XEGNe1IpK!W)=S`IU%3e5F;mI*x&K&29gBarocv#6$)bvK zye~5z18;p=dqa4WaoiGAxi!rv%ok_#lj+7VOna=K@mU`Y!3=4dlRy#qJML*#2!)x{ zziEeP?M{#4tkPRlBRev{>k>AS;&jw}R&W9n(-iTY^t5b5OPx5#vimXtyZa)yo7rTd z@R*G_L<)R^FXR5*#(nq!D4ncFz+D`1ff!A4|6W_&E_Cbl9vfI!81p;d>5SE9y|*v0 zbpCPi79K%NO^Y7LEm_3M{)jRP(BqQ$iR)#9(HME^rEVE?EK|widqUIIY51uX67jW> z;`-c`NNlj=`n3$tdGxOogVjC5l#IRi3MF^YrnE4k&_yngqq;-Ffgd~3@-M)Wpw3aF_9BmRif3xrqgRu|i*zi7R z^y?yZw@bC64#vJ7fqC2{iJs?)99nscz>7HK&gQW<&-nRG-fMpDT0JR0;1is%tgE&= zH^4hy*i}nkf=Yc{PHw#NO6sbw^#L38@lheu5k5!6`h})*w>}oKW}!8mb$9LaJ+c~& z(`S{PZ{0%*#!oW&{|HI`k@6vEi9PJZ_R&4ZX!;|I*dOYDcF0!n26(jwx(^7owDq> zl=7#<2R!Y_x!EWIzl^Nj2kJS+R>d!}uGD}54SA6VC4i0#ouoJ&xEif^LjU)k*_O}u zU*IL~f2h>imqM#9J}`d&_KS1B9IyZ|@WBJxxagxy7BNJs8m^Gj5W?)OYz(AB*av(o zP$Tuw-!wX05OuqLsF<3Dr33^evSj{zrWWXCXEm$slV3U8J3cun7F&ND0D-`~B;l}aj zvCQe*YWHy+K=gycxppBgo`J8oFhQxvU&+6#GD`|sl=w;6%VwdOX)kDa#W z@eY*()spd>Mx^?exA0bZ7!C|sGK_mEe-<#~tMi$7H0`Z;ClEbL@Ei-z-5nsuHRod< zPF+7GAh~TKdBi6Q2|Po+IcIi50RMg62tSK#z+l<_)r)L`YMdXqo@rZ3=oICU88Fb9 z*&fSNB@F{vTxEVLdVVlBbMN~e`B%unQW34ELo&cYe3B(_e@*Up3~7=}2o|$MJkXeV z!8Yx>_`ThK_3wp{OqZPb8&U5|k~5%O8l1Tdf1eY4SLJ!y4o*^JY^gIk3(UqY9D!KI zf;4%4FW2m%u>;?2#ympMjA@ZgAMNbDb%WM~Veyj%UjD>UFiv$Hve!s+!R+$!i1B#e z$b_^s=#r?<0e?v-7nhQ$u~`RQB2+4D==emgoFHze+7Kv*#bKKg zqzu-QLMOkk{Fxgl_Aw#ZF0;}L#SeJLB9HgZ_|;&+c12c2cgPb1I9{Af7w*M)fCBNG zVN`XR_AyfdUNmOzF#;F@*w0IPC6RXrfcHeNgGa=JZiPl2|KO#Kr@HU|n*~si)uDhr zQa_os*&_Z_zZ84Nj9ldC_**w8T#8xylGIIWa|@}g%$QA#pp!4|C;T>R8no|EbDr1D zoyEO9%Xsy5SKtZnbbxJE6hQJkF6rjox9KlNxL<1C#M7+c>=?B}2RPsW$Wn&E#|H-- z6FN6tG`sqGi{-YGvf^}7n~OVBK?ngI?Mwv^pP1_WI8AtLEC)2m^;GW(8{VN$$HqIb)$yhbz$y74*Isc|eW$@TN9Z%S~p?9v!< zN5kWYtlDK-VKNoz5f;HiH#|D=(BJSRIzSi8`#P>I`N1T_1VDemMpcmnvsf*_hlo~$ z4q7A=N0*}KB|n9(IR?ji*UEK*Y@}5rYX!ki?NdB9REA`9ettSrjpnK~ur9A!25L2+97nj-z7JL?^Sj@#OWa#%&ZH)u|YN10kFqi)q zB#X^7w+otD*XS;2Fop>yTr1zIdzLf;s zIYV1Dy9D!$Siw13YD#cJp-oW8%|~m}Bp>L|d@He$c4v^|GM(-c` z(ZYrx)A%$!s+9U$0;)UkcSGjJC=Mnf9nlYXJZ=Gd5h=S~@9g(85-Sz4mtH#R&a`O- zebss>_S(RXyvB@`u7>se&NJZ$ z7l25ELIsdcE<#qHMtOP!K!pqd+$BmfK00uL$QFv<{bVCvY+s+1-!a;IJu^(HSlQh< zEXI^=zQSv8nu%ZafEl=yFa*ZzY`^4tZUVbD5ZEO=Bea5$%m+e35P&a?}7Z-Y=m0&O8hgC&Zcqt_EYDE2Z?K zLWEDJ>&)&F#eZjJGkcffjf<8QHD)+X8*WLoJI=&rlfM$AP=|=r`F=>l9^*7! zzj6PhAGT!wOEji+ce9zQ%-=X>iMRT88w0)E)lJVN>9;;vvkS+cC}RVyE~9fE2fFw< zV7D5dCSkqTwh~63>A0DhHg+g6b&a0|`(hr_aP!O6+R3o}9^K1dn*Z4L#ZWdO*h3V4 z75o+A$(q*XsZuCcJ#pYkoi-6dD5cV~hzeo4)7#P-K!ic+L@30mKc)E^i;gY+-z3;% z%dMtG#FtfxU4L8EpzlFk4b$0dih_qO9e$bWhz)q}&&!#$aW}Q?piMl}~olSuP ziinFn9b>BghicryZqvC~{5v6NvvGcR1!61sFc{*2-M7MH;&LpOqK|P_DUm97bgPh_p=n z_wFlD%>)+CtY?{lY_9cB*eH3AQS^2286L@)B%RuDtAOCYWafy)bOjHwQ$g^_mASlB zB?>hDddYMRt8BsTNu#s*a_!g9tC)N(gs*#j>5KP1vG@t%I`LXaG414=f1;pw^SR`a z)Y`M0MdYyA?Mh>!l&y2`t#z$KqMcJFGyvNi}F3AQeB-s&3 z^U`V_!GS(dt3R#+ zI*L?iQXTi#YmrQJv!i`!S#Iz1!02wqd2H>)>H(UgUpWQ7Pb3^M8J2upoTWz#3714S zOfdJ7@5nGOl$pJow;TPCDB4`aEk0e+4UNz=?-}pNvpk?hY`q+?NU5O!+23$RZ6uHM z#D%942?W9!>czzkx)jV%i5=0YGaK$M&X2M^92sEhQ=4Vf|f(Oo64TL zZ&gQ`9~*;HxVSDEU>G3EDXA&Te5t+k_;1U8{rcJ> z%TZ!?$q}$e2*VZZS3!uISrmtq?~`ER{4e`@@*TJGdE@R7Gk0$3I=TtWGzuJ08dtTD z5X08Z)`XSRaWR(AD6z0~wG3Mj5>nyjDIDJZJ%(*aM#bZOgrDgAtDTrQdrRG59L!`O zH~SryYG60lPp#^Jq8t15`S;;VC^jEd+}U4F3aJ<2Mo(WmmdUKr7&kW|1v%q(-)1;g z$-loP+q?X`?_P@hsNPE0@pbn+Uu?nEnWrCFs#5>P5_dtEokYaJXAG~_vpq`qDDZpn zszeDCCaWp&(g;t1V7t#SO6bK3qL2CvEY%N8B4-u%})*HKY@M>Z%31>}`U z&j+*Vb{Q*aWjf-8P?P-im%`slzo@#TzKR$nny`q~aaKHL@9a5XPqvSvKZCzh7rS`_`bA2kQy`%?i9>?3u@`S`d=+xjkJHY`ZY=Lry)DxO8qQzb zW^Boupy?0(T%zb~!C{2ZC(%QuN~-}d^+fSG8;O*7ckIS^yA@C%N2y43EK)k@OjZ(t zq9=)3QtK07XJ}`P@v!;E2O}tRe&S`Zl#I2dx?FQV13;PLOhe|XBxRKw^BE`O2^nPR zYzuiX2YjMlRUD0};yvPC^0PWKoW~t38UGRG&9mkLBu-mdBoa1RR{o;jvY5*&>7GWr z5D(^%%bzy!^kC-GQmo4ekFD*e?^YmNHGqqLHwPcm&thCvKS|P8gZQgV_|SdgRVyIp z&Cc!CiR%GX;KXyhP7>*X)ww%)E*KztA_As-=}B>r<_4w)jW3>XwR>VY$*K!y0ClHT zCx2ne(y6!bDi4P2vER02g`TmDW)&$O`Cb+yB)B=Dpd?u>K&1aEp&N2n<(17%6{Wvc zVL5fUdtpW0)JGbx2T$<))OvtGGR?Ml{6f*^tlSE@)X#-Do)a`Uw;$Da2c683XGCo0 z&o)qdt6J5na4jTesPyRO0^VjSRSYjEyz@VTW$-E9RkxNtq-w4Wzq_ykne&*-SYy{| zE9C?zly)tLkV%_f@KkIP*^hrpyk|s!bvNeCvL>=adEQ30d5|PzfaPoC z!+~SR05xWXc*yW4meHzXpO(&{c$Rs;5$0?Fk)DYDpzEoPTGx;GUsP}@c~3f<*;O^J zNrb4e0WDjsC*6^@IJDz|Afh%YnU?#e7ZD@Q)C8FaL*hw(s6duxYQOVkEbwO0BnQ#5 zXY<&eL-KD>H<1MA(R8vdwDy)`?js~dxnjuy_K3?cREMnTuYPcHP3L`NUz`^{!a?67 z9&@l0<;RUFUYn*?dgGqfC)KSfDHBErCzxc%m4$0EDD<3tyACsT-}u&Z)AnZbW`G6> z2rD{RJZpsevdqpHs>QO8-Zdm(fa~C3{wc*!GV+V1y2^9rUXSM_;R+_qtJ=lU?*{m5 zTKTxti$Zh0Fc`VcSrSv|>g;c$WAfj%9Y3X@DVnDxzu@R4x*8dQXWqWb)rm)U z9g<1m?2`nlQ4h-DFx5AubaT~b_-pavV17V|&FeGzM(B-6$ueDJ&9WKVYu3>N z^Vb8;>ZKKRJK+>bYej+Q{W~yyo7xx51Ck2$aex?p-M5-CkfS7$_eJvyP#_IdN zPmQk#(%l@7l*MU-PLJvmRhhm_z7DRzh8&6Rt&I*T!02Ro@5?UtRg*aW za>cdO2>kprBCV?N8fTcl;GKt-T?HvJED2rJLfb*A zE=5S%fG!ngSVFzYag<1J{B-dRUGmKLr2}#5Ln`d+w%MWQW8wd-gv0JMw>rwWcPny9 zVqWO$SEt@*;g5yeSFn2~0`F92#xMN@R=5YDlsa6r6w&+-is5Jvx1 zpE-X_J4%~rr9J=+J)M2$YPUylK2SU{Csu6Gx%VMt82>M^0mkS%gcZaI@O16rUrL4J zyJ@Y04Mb>AgAvS?sY_fKxv5K8kBMMn+Oyctq5=u2J>I<`CRG}21({lJ;5PcFIzVZ( z47YZ}vLFU^S7?Y@VOT5>o+S-!dz8yf;?E8*te%;`FaJ^$Kqz?&1V2eVJ}dN{rtk7s zP5tI^&mZ@7UDkmAM7GKC#AXM}`KNq(=%c(j@)t9zsZ6Vmc%FaArPGlFre>y`M$%SG z?K*eR>r&2~vLW);ZF-%O_Xm6X@K8=;!c0%O5gDE2zc~Zx#SrwXZA3Y6f!Xvu!r6P6 zPp~^k0`CO#4JV^%*+plh`L#A1z(6}Oh0_zp9CAf69m|YwFz4EuAFkU#Pq3=yZ`PFz ze|~Ttt4BONQYpIV+fRt*e|n04x{C9L83Ab&{{GC{XjL#V9_DtGG_DeK0|AQ{-~E1W zPx;6K`ERxJ0@g7qQIEjTgsa@-HY-YG(G2Bz1P(Y6xI*QeBXt;>i1g(h@ddXu8=qkb zor@fqAQqKfco_@iCY*S`J{`%W|%M zaQVkpE`J>{I;<9O#m_>vsN8IZE68xxN=4w#P{B8V4a3oG`(h7fjeyD9f_**J=R7T>*-_x-QrJATX7$Hl&9aKHEW zn*|O4R+ECaWsSnbG={PlP!YTy8`Pw`{$98=>)`1}jBo>%N4NeH$c-ZGs?4(Avw|aD z+CRVVAIGS9J$Z5 z0N+-kbO|)D<0bQh{45Wmr^uQ9N>V&!Ka2^drClysL=aF|Nwu=vZoNGJ$|Zb;g*^Xv zHnKRFmofV6e4YEp>PEmzW8z_FHNn%JP``JOO1_dFkiGqiqr zGk1xEi6M;+-JlBTpern{3_1s&EA%zGH>mXbx5&{GgJf~CUf-)F&9dVxK^4BOyqJge z+ikUxo#(E3f7Hu7fqqe4D>RP0OfRSX7Xk7rv<{Bd`TPkCmdiz{=j=L`w@TAz z%N<{vU*DUz*4`hTVC=zd71n}9M^jv|#uuKFLqjqdC^COSMWu}QO)~n8w3tFU>t~TH z83y$YWb(feA%FjP+W>YTj)vYY_dW5ijcB+e3|%`{R)%QU@)SLMxevMDN3`h{o-mLm zsOEUeM^wXpGwzqIdcg$_&@xrbi#mQ>wX&NfLOxYNQb$>1klHsrDA1G8sK=F8N($k*xSd)hr0spf9xPDuGe<%>UX1W$gj zu#VRcHM~k1t}sq3Eakp$bjO;dWpDTkuR4K)jb?A9MhJO|@DQ+pwnR8tumvDXcOcZL)&R+Go zol24}Iz4wac8@1^>-tvl;F2tAgj5^m`+9HmacD8GDagVsadG4&z$^)Xb+W$+emj;t z8IYKA-73uH!~p4>#Qq(Cq!>o_=eN2)Zxncmb<9@;9xWqwN5qYUKj|jPph5hP;=NGp438HKj6;7~u+IuF6F+dtZB_>H-dSYz_gU!tAL9BJgnN(&>$^cg3!&@Tos^s!)VDIm-e7T5a%vux6b`fCj`DJ2-J6hp6??`8z>=ZqK}9daI0C z)w!kpuKkVNXP4R|{mOej8-APWrbC?>`|!Rjn`!2e1K#1M_wGI3;jFkL@asY8E-msu zwOPYAkzmp`ghEE~OIzK4d5$NncQ<@zh{9(HUsJxguRnS9fjRMbu8JPPs?`z7Xb_inpi zw9jGs~XycZ~G*=sg z1j5fT@_|z-lz}l~!wafR-K2}dm2C5QQAAb3wk6LS-u+*-8p3OQ&uxajTE*%M%>9ba zRB)bRUqXk-`<7NWhn1%9WyQ=pZwIBpSRO10{f*rM9 zCOt zV%NOT>MnFkZWOpQ)wsHJ*P6~JkQOiFfdvUult??=T12ra=Y~t%n-9KdFy*<-)|1Vb zO*2C#J&jXd*Q+y=yLi-dgv(04LOq5R$%=v*;yD!=6m%|`FeYi_2bSmIw{ES{18hnE4fk(fv`3%N$~UOR zCe#H+IKx1j-(c9!{z4|A{s#44U_;7dmCo|<2Kv@i;2)}LAPET ze=+-BO9}khdBD>yNwz|9X_=lQh9>M+Y*dtV$bsQn zoW#P&avDeG@8+0Q>{xVzq(|kM%*u>jOXqiEwa)u$8`>lc--r!1>}ETWkK~Q}9DG+~ ziIW<}x+EsNZ|<}PaUe)qKM0AJ$hr~6D3PFdm83=YcMhWlMEOTY?? zPA;_hb|D{0f!cN9Iex4(P9@9oB!3_L@=Ta2F}Ox;WGQGIhR%L7z?g7@nU znJtXi`n{XG+kq4(a3l+k2?Au32xmJ!K92FD!G; z|KJc$k?vcc^=}aC4Fc}BG~$K`!bNAgRW)tpZ7w0C8?B!+Iu3pJ{D)k!F?NzGzqaGOnvKlll!6UK4S0gC_f zkOM$J$F!V!h2<~HbIUMd=*JX<+i7T#|DSW1JTKy~!Q$3}p^D%6@g83So8-CCZl9$! zrUcp_QPcPgBZUl7iO6=qEDo&Z!EcM?h=!#Ss+bdVRB|d_aM$4DIQOH>0a8lfMwA`NqB{vo^Syo)Nk4!&yn(L4W*B$HuoqDz1WNk2-nT?LO4(%p4FY9L zJnWWCW|__N@jzPwS-B94IYSD+plk|7KmrZIREQcLz!LQIFBJRT;qK4D;$xS6IT51O zm}2`)a<~uoYevgkHf^x??qAg$qj{jF@CyAG5{!AtFoLm?Xr`wZqJo-kPqfFq0lkUgT5(w=^ zEOl`Ljk*|t#sb%dLs>AS$nS`AJ(}Nl(NxXgURQ9@U!Jd{S`zbExjW*EkA{IQrO0$O z>A}kvL2Hu2DZCYLU1R{xYUu`tp5bf>+Z}y~)+dXR@$0htdt{fH=!&{qD!v)7e6`#O z9Q1JKg3!B5irrrRTBUQp_fV4ogB~;)#_@MXEHM~7W1Z|^VKX8IoMq2_`$cI)77rA( z*x$BbpJiMUti{;2l`I@m^uixML%I(ByycBk#M6soAfWg6do!f^Xr6 z$n}3oXZP0+`m|WJXoE5X&0$5RlDzT8y zy?wbY1QTQ{OaSDcT&MNomG4FpKR<$&rkmBakk z;1b4VhnsnNnDiv$WO*r=iIyhmOCp?S?-U>iB=SYnrz}1x5i-f^1ev^4ex8eezw+zZ ze&DhWM8)1B);Y;J!z>eb@g2=pty6lXwlL9uKSzl%rW4@N_?6$_Mob^69so zV?(7LQQbc#gvfI#phmA6%@SdDBYRJfHH74S@ZQ}veEVk`Jr8bANtGx&-Z}(qf+k>; zLgm-vO?9apAjHxmqtS>aH2$KPS9qWw3eQgd&;l-w6iszw3GPAf0jxNumq`!Uy5sHk zWVm}gXE_B~*j6^kI+J$TAD4L&kgVKFpfazIuXqmEzcwg@Mc2^NH^=?Ff9+DZ zJH!|fCpR?B{QBG@W;g^ar6Idvg1Z)HE3Hh{Q;5reqS>D;OdGiNPBeT=k0)u>FpPIx z15iktY&y#40GYgXPWN+P#PJ*YhlHI*0oc*<-SYi5+(50L#NAmwT>>8atw6}Z7W-zm z+RBsi911l+?KyI=BaFYK*sXX-`D%t73bi#(^7qGW{wLd`9@f5T;BSARa^buO7TMGp z=(^u+{yLZ|4h_W;8aKUp0g*9JhI9?|0DjZcBzW0%AOCzkCsh1Ku$dHg*8y$O!+_UQ{NW2u-F_xF9#$~7wI$%o2ebDTTO^Jz=3Y9td9GCQCSQ`2z`ac$< zXZ$fd_x^A?)tgdUiY@^5?kVTUP@A2a#U7$In|TcHT6C(>8F4m90CK#qT#!ZLITV6~ zxAKBwQ|g@vj*P6fY&LMK)%n@u7PpHA3AFP38@j$yofHK+LWQ?*D?G7AM`X5UbBm%_eq zd@T#^`xTRrMsEzs%Xj9vRN6P%{Puof0|FVV6vUk^*A;Z$W?#~QUE$v2x|=tthZC4D zYeX=;X}Uy^mos~2oE7#OMAxf*uJBMruZe9^`YB6=}|h~O@xanp&L znAhvEn)<_>Bzw3i;0L0kYLEB1QNbb=$`WbvymDKfK1723-h%-mdlYtiN=Vv>0A_PS z@*wNCm~t{>$+}9%ck&iKBR?|tfHW7e-RbW$;O#eJm5v7>MvDC!kCNW zfFDC_uyP@uL$O{VuL2GNNAP4o9Gc)B8DvG6keKb0I&27%=XI4ME$JvDWH>sh*yV{x0tg07wJf-WPbSD)NQw*(sg9{9 z%cYnh5J1#4npqc+{1cE7O(Ha!!F<|saN2i6Y#Jx4pkTiSnx-C>9Pmd5b{S;RxVA8c9!=Ug{*t&WlGBbAGb8}~y?qh9F_BH^ z;q$!vBboM3XRhoII}t!dOb>ijKmoG68WDoWBgV!Gb$C8*iCeP`g^c*ke~x;oT4v2D z?O=tf;h>TVc`I5qN^A`b_p;)~NBEQAk|K>{C|M>BD>w<6f5ui}f%yBN1cD!7{dLDg zj1P|ExN3VIHfbpPxuv>cb8{E$%UcA(ZE4f|*b(Bi4|0zwARELC58xQpAp)DS|Kn~_ zL{Kggdz;#NldtPEe}y2CO}N5l+D|3sYK%@iDPUY$0m^U(jeW$>V9Lqk$#FDF^AdD!2R^M1 zGgWSmGT5SgKKOd7oF>?xKMr$t*C`!SPc*CDO?^m+DKmhxnl=k@vwTw=ksPU>IRHAy zKn1wVi;a#6+*rYCJja*mvVMPoomMAs=^3NYxhtTQWgCI1e>`3l7e&*$a+?$KbO=O&3j+T_L8kmi z+^WG$mhM1Y=VXpb;@c70!}6w0p)=_rx5e=J%P0n51{hAC_YR|nm`KcL?QrzM5v1u zDFJ_CNJE1LLd0PsY8lT_Xqzq+7jv|_^T49=Cy~UNJf?Dkig+Ly3{i74518w;MfDHe zALUyLz{{M7m9hB-^_oYI^4ln+c@aC7sjxr8W$E-DposPb4Nwubt4lvOEXBZ%87qdN zOMK!y;Ws~1iBe8_ujzX)+REU)QU6vE(+eHq?kI#M1ynw%JA2lgIdz;VLi{v|7b}-M zs=%UZiEixjk47!%qH!%&QT1MM{I4Q1|eFYOuYc5Eb+z(TF`!YOcHGtoQ<}|9`W9BXnC|9fKD60eF&G zLEE6(GuNpbMnT9f%1(r@-v;H@|I9|(nE#!Zkpx>|5&o1?lu1M-7noqP?VJAMWy3-P(lc{&KBZ1OBPa!7jUJ64m(#1T(# z?P%7Ta{8m#JExP~W`gXOWEGGLNmDb9n#!r~7hP1m^E&a`^%}+{lIl?|)bK*$&hgl2 zvB8RQ@jpdpI&NttM+xkV<;tNeQ=0sZL70Z-Hh{`3&GpjM)eSNU-OS%aBX5ILSaLja zIC2E~e$NNK`OoKFsE=j+uj}9Q2q{p-Xp)3Kr2WZM?lx+wmCz=uXeJVsFX3wX`gVxe zVNeRrIfFwgc{o9I6%I1f*yNJaQig+g{G|Mn<4hL49>kICNRUIVZIa|E7P&a8z9~__ zI%Fko>UCe5J-&(jZ0gmQA->zGPK~b+GL-^@ZndyykfD**Htd1E+nv;2r@(A!C1JJ% zX_|_fVWMg^9mX9mtI3HL5KtxROhbh?f@f5p$l@%6M~Qr;x6g^B4aAOWZeZP|n3Bw? zj;dU-qxA;P^rKhoyq+T|vi zegK4O_#a0U^^oNJ-3)Iqazb;0G>%UNMQ{fko}&VrewT2`mke-uE<0}{uevUM6`f*4 zCKEg^=5jw=xF6S@!A1LzP)vO-xARr?>h6~l(12@ZwqSmlNn~6tX(`?$9A%bL zj{nDVzp$fqGSHDL?h+g~I(Rv)VFc$uRgD@+^NBlwf8zJ&6nLxN`Uu~I6Q;o>HG}H* zlX9oqDb6%BMZUU!8!~Y(AoG%&F#^{?`7RDybd3VnQV^ZCIn!<@m8-1A9oc`7+9s_uCg`1aGQ=6B(qvZe1^@WQ!l zj!bn}wwY$C0i^j_UyQ@uE;scAZqsMbNpSiQbD4mfVAU=Tvx0$&`#U8Gj`(uhX;7VZ z9DB|ydn;w*-on;yGXE!D=!0ty_0%l-n_J~E2p1?W2xj-_MxD!hCt8nd?s-b!oCWf< z6EGX(6v`!q6%lm;ZM@yUlI+!+s{v%r!2H)(_s)Wqnh6wUG6ZJVkR+pDSZ3vj!NmpI z`Q`svF$G7d-XRR7L9q35H3cK_l&-K=UJq5xOzoEXM3=vvIw6;ICR}HUYp3$dLn&t3 zXo7EYzRh0G*y?MDa*$;d!x43Xt(GS6z#HRrqLyJ4?|@MUKB-!^ZA+D?P7=&vz8fo* zGubcA=tM;G8g2v4LFI$1`n>{5CJCqyU$865Qtc9o?+zLe0-b{w{$&{;Ym_+@Hn#hp z>*|_*oSfiP8cNEQKE6228&KVY2{wI;r>s(!=4T>eY-rSxH7<8!eO~QhjeT>^+wTwd zBuFIJv$Blr{%=x(E{L1mhrb9P5a-;UEj+93NunLty6tF<=OTnC%3S$o>Jc*Kbyt$J zu^xM&kds+w_!>OyL4V!ml_kFo=Dg=Won*#R{IbpT6Q^#v+0TJX_Tqg(L`I|ao&3YU z6k~D}8}xcZ^ai3tw&H4Ms4b`-Q*FQCP9sq6wMW}U_Wdg=?zQV(z3E&%d1fQVX1qs* zTdz%LalH;cXNDK#f*^#fsVVVNxA3q;<*xsE%E!S0E8TyJ`hE|9-S7A%uPIhQ(NU3V z4e$7jGfa-jl5lr)-E{Cz)?uEMzw&`SN>=|(zO>>zL7CqL5{##O!@BZ3c`~P zrh|%A5Bnx(ve{M(#&}`qWoyLT2+(zjZ=aYqY2ZJ~+xUpULtVaswP*$3>K}f$BXIo9 z^1{I9dT7XiQH&s_;h*+=istqU=69uk%VH7oVwA67yN4|4Rh>UL@S^>^i`kfjp^g^&OhwXL0&ik&5h*feH-sZYeAOp!^%+k z<5KrSld<^8Fs?n_xZT^9+nU`$Qtq2+LbpW`T3zvpL?!;~EKeWaUn~h zLA77tNAyA9LEBLdEzYJ~FXpZFcnayWvGoE5gzgUYiVMlo6j{n$*C@_#>E z^t$mn`^M5)hhb<<=m@jj3)pTx4uL|IT$E_hpaZPr%$oCIMJECPBst#7PHlp+LNJ6V z3N(z?=e#>mei$t*i)$n}fCnkeYa@YVPy1Nfz#y&X+H{g-IJ#V#uK!q7AqzreeC6vj zw$)OMS(4s$X(b+9es3!&yc8rPot_LfFZ21+2G*YiP~JHZ&briXQ6re$#D-g-b>KVh zB9|@Qx;#N+oX5TXk|c+EPrgX{yvoyx^??LO$F#kg*KqjTfgJ+kFl*R4n*G&g?bcho zI@BQMum;h#Edm#kxA}byVhyo(KgD&$8+A`Py`0E06?A$w?#JC(b-g`M*#XWwX@%_E z64EZZwgYq!F8H<+)a$p4mP_Sl<9%?y{;%tN(>CKw4-^uBnt1S)yuFud zo)YsUObJq}GLL7EH}qt?JQIS?`EOsOiKP7N!Yy3N;aJCCpQlH|z1p7%XARF+BPE4v7JdT`n@bcPF7JeS~-=#BQhK z`R>1POfNG7Svcg@?~v`zu+18I3=tNblelJpNXy38h3}~?okcs8vnZMwv%}uY-=DP) zjNQRNh0j(cyP_g{={;~%)K>qF5?Wrtk@XmF4a?nF9z#&&b|P7$&kqVaOUsQQC1C&WO7rybl6>_uX#9!0-K5H%Z_77gnKERy> z1XeM_#KNX*4ikWUEW*BYjzLpvw7wYIgelO**LAsxrLPCn>c!-K8Rpr}?tV9Z57vd~m55Shz%B&~4XsbhC*A>9Az~u;u?L^3I-4Dwh81YGJha zb+?M2dE?U&NKKTjQHcS%bR-QArMQc}`L z3^2sdNT>)%cL>rYg2E$$l+s9d_xH^6ywCf2f4@JtxGp$nW}may-g~Wk-RoW&T*zP%TRKB>+b@>j&EM+WdL@do+bpzVA{hG6>pRfk~|$BJJ6#&Wy$ zDb0fjxO3*UMy0ykg}*8vL;tF(^wfPLW3I4bY7OlB`l$!gkF0lWmBAXjKgR9Nn%;NX zp> zqD(~>niJR-X!tSX3*!~#YZPzCvqdwe{p-+I6J(ug(t6~uA&qerb2j;h`jg*YSlK7e zcV0FgS!C_dLX($1yMV?6FM=+ZTy=_#eiW0r^xWLv%KB>}@3kAd`JO`521O=0y8AFK z^w~~{0pXO36?r8k1f!?viK=le^)P8e58%tHtqZkT~TnF(wQSD&$_HH}G=kS_ZoVk5yCF#xG)KMGV-I~5EWit!VxfhdW{Hy&`wZ*{s za_EXk=zBgU$Db3%JzsHiNQ^!>gp<1|8h%y`McQ*%_1njM7{irlbPM!i!nlfv!&~pK zV{~O?tm(#GjhyWt^7)F$Ul@#R6WplQp+&gb#S+N`00nZhQFW39Yy*atT%UA#Z!#TW zNfi$J0uWa#RzAfOZ1)5-XQvS7+R*A}L4F2S3GhOzO;=@1C)a^Q495&y9ddO$gHXov zV7xgDk$_Sv40RR3=8G!$mqF~*SLxa>y8!*F45xy?5`v(j{C5(d6B{NntH0Kp$TW2> zF_R+E+E|nPWFKmYZx;Qbx<4D!4LT&cE%?^{=e28mxD0gi%#lhk%iLQ<))1*QwcV`N z6?Qun)WlEr@j26#Cuo z^{cI}o2*>#9!78zC|7lE{}S;J8ITPfs^{PRbv!&yv(=zd=F@vUnd<>$a%tj^EqI;P z2cys-gWW z9473Q>$nCO%nQNdu@NUMVh%lYUUjP+oyAYKdIZRO9iBBPWC=nkbs}DgpbKouMxN5F zJbWj=CmNQ<2*dkg@H}ZUQ{YYFk1)|dmo%S{L7gy&KdsGtApH{-95D6{2TygbeXcQO zSS~x+vh4_5x?q*6*3-{j@Y$N+3S+lneHw^JSpV9^EaXi-jAzE^FfV}$5?$5kKCTK@ zAP;OTCTuMlYIB4-W5~li_g?#$2_Q|(ViD|z+dj()+okx^4>>H-)NbED-%l4Ydlz%2}#B(_le*y$1Bxdr(j22#?z!5u&E3*$#{x{E4`H3R#7{hnGSE-4yv=VLF zudI#^RpD>}zlq46F6#|(Mh%jKUN-M*Kq0!qvoxcgstKxJ4p-pe3Y!n%@7v$)3MzK>p6x<;%xxlMw6@=?JBKeA$iN5_ift|&-f z$-szrzdV19cErdMGsNE|$I$HF+l^r7{t}r@rcN=}uAh zUM8GfZ-O}pRF)3T4Jp^>j-OWC06p&L z(^R5ehlU-0d|h`;2tRYQI>nibKEdW>y-DO(2$xOK$ULF28~^!8smsFO>gl0m?2~P^ z=64i8Ip|5Em7P&RLzO|8u2%2do93ZZE^G`0Xr+gp|4H)#9}gle#9+i$Mzm8^6ZwcY zm!Z+|01kwXVbURh$K$YGusEh(;4>=rjrCdZ!LRyLKv&72oxDd!sj}=P7@>V+wGVmw zRL7oO^NKI_**-mH*!9_N@!95^`^z_U6+C%mUN&KG_oJXa#N4-bm7qJx)KKSEz#B=c z>$*tjVpHZLA@^#yiKo}&MLI+ohuxij&f0rR17M9@2+ks`OgN629bx^9Y7W9QrrEte z)G7^ZN7Ffim{AO%bnLCNlTu;@jxA@^7V(wP+G=db`oLG%4nq;fE_sAWh>L3KOPzp;1}gyjNOi;$eWR znGi&c!^&L+xY%YKa{ZJLQjtDef?CM|`^OPYx;8V!b(3014vrKlx3b0r!Y$sT)VsNb zyECY^z-igHqM8M-Usq7uaAnUwL$4N;(J|;n*H4hxNpxQpZ;*In^o-+e=kq}$Ui+eD zJHhuRdeJKjhXqh>5EvqdAi%N5Zj~uOkoocr67br2kmJFtI^ME;pB=LA@o4Vn_)+UL z*vcZ!goRftKfH*}OU_$eYQ-3oGEOT%W+Rg=h`h;=4@_6P zOxFvvJrn!{YGtG1Jq28K`n9Q#2%;X$Ubcd9?{aL9({~1lUnAgPaXAYHinup9xSlT zhqFPh7L&1LZ;ZKqO3AqWT6*sYC3;yF;Mkd(s$0bSghNu zdxn#wg7EE#;siQv=%v@f-#yKUjl2Ui5{1LQYs~zXKbw%9nLt<3w;Y3}Z7r744i#Og zQ0W+WY%0_7Y(-NiL8E7#QwUtF+~Z)JpTtWO#Cw!(C(?Fx*KLefn_zFDK-wIN{0y_! z1k*DE?ayo%d)a0u%t7Q2EyuGkz_IYutcmS$<-A3*Z3Jq>Y8qjIt!P@VxRJ$ zg@Nb~H)YKs#!N$opfK4-b(2;ntVQFYf2p((eXTwzzI>7+wa2W&+s zhqKj&CrUlw4N=Q4tvfPcagcSiNb?x5HSXNY5iN~9O0ZgCuX$nnIz1 zf+8G*c)a7Xg4WK0xk7dcaGAaelelo&#&k0<3{j0c2E}(Y5}Wpu_7pqDJH256nh+^H zX7yIXA15b~`IsU~g!ZVJTiUmGVlWHCO^YvY;KOsh0m~5rP zil|w{vVCht+v?rZNCBO-Mc8jSjGgFHsEvi@St`S6Q)-Q>>45wr0yJL(OJChkwLN8w zWd(M#LF=&1#St}l@&5XiV}rEU_8M#0voR6tj>pk2t}Kt`@g?X2lCdZka(8Dir**4s(;j#*}7)+ zsYAXW#2a^fiN14=?k*aR>Ve5v%%SsKHPyx5^n!#vzfaA1-3kjYZEyHrcY3{hv%LbZ zIpcFI<_7Atp3-4OAOzJwK;U#YJFbIuBfU29enG%M^raT1|9qeme}KRZlh?(U9sb4s z-Qty@j%Pa#c=0J@qN0`_jJzD=4=gCqM{y5d`^y-MX`tsQps_2<8RVD3Fa!{6P#%ob zuM|Gxd&xuqr!8-#>Y3+PIKhW+6h1$P2%-^fE(;q#=H}5FfyrB1Xv>}wOxCu{VfYc@_O@_F?YVFYNQ|PdW=0V<-vQkP(;~E36Z0C^?sch?FVpO-~U!=2i zvhQ9zQf4N!{2aj_uDx|X#1gr=RwBIgga-lfN~9W7l{Xzv2YPVTP!AU)hAVHj-p?PH z^JdF9I?&xf;J)sazP&dHwa+N>J2p1Rt}2RYNN=v;sN z(`j9~(J-qk(Y)Vk^{TP4tn&kJHbQxD8}A_FoT57NGxGyd9q+a6u$NK29eZx1 z164S$neku~cej+{wS_xTZAkZ>kyXLL9AV9M=9htUjO_KY`tkSU!%79iXjbmkyO_go zJKt)7udv3MHUx)0S|hx-lppAF(BmqTM8>8+0%P`ugXkkN;LuoQ^2l&LC=QD_i;d6) zSGwyS_OcE_@|E?Y@f1>9PUY^C1<1cx0G$ewj1W3xMnNFG1_8W-Nm+{t4U0({JU-c% ziw&i3LmIQHptGY)4h;@EWV@|1>sW7o;GasG@w;?2gm zv0(HWzL)NlCVWYSb=B!{)g~N&Q=V1DFl!n1mlZXqq34hDQ-)hrE69RRU*z3Npx3EM z$Yeu-+9&bHb?w4{k+QZoaJiM_gPAaXFc3hZ%PHz=^wx$%t0_ep(Z9ex*Ou5)n&pqXmMM@=J&3@C?bon+RUQJT$6*i=*CNUEBQ&c+& zuSfn&)Br}nKrCvCZUUoZM`pmpuXfw6m$3_oiWnvBbxWgkr6$w@AFU9o6}6)8ZC~hvK@u8M`AG(vo&x z!(j5-V(t+uq~*tdh%t){7GGda^+Sx{#yFkG*MayQ|N&!R9Km(V57!V8JgE^b*9*! z`Od0+LUye*{uHAXyY@s)m`^d?pDpXLUR{-;h3%pR5sCCf!H;UbVRE9gD9?U@Df~s& zXyUH6JCn7z_Uk@ut}D|i^y-)XlGRz!yD%hK9cEFA*MnO!A36+CrXuoKfs8268LaQt`^C=Nw2Fs_40zD)sUsKcAC=e zbU=tm!-a1$3yJ{aGj>6AR?G0<@50HUh;fz$Ook!=1dJHD^XpiOZo#t|;- z>1gd!Fw>GnLGy4b3r3s_Fi!PwH1Ei1dQC8&F46bfOsq#twj#3Mg-HxTQh4nj^UMF7 zz(>k&r91^`hd?ZtvRsr^ik{N?P1~$x+ac;A6Dnbgk#g)7fnPpp5NCY($q>IY!rS#LcoJrkF>?lruL}9p%%vSGg4taVOW| zO{$r~B@Ogw%5wD8`}ObK*T#h&l|JR}8j*iFuHXqVD-yQd2cefKRI`^4@0h=a1g(^| zV2ATYOs87c)a>F_+`IEiT5F=H%&-5~(a!QU7nkI1aB_l7sy&A7$l@mQeVtddhfuV(Q#)>c`*3q*~+6WjEWLP#*HRF`}$hnN> zOZr3aI4(V9#xv%0B2tgajiF1_84Rsx$D;O>f$T^N>1ZeU$%S&dR(*PTQT0{G(jXXO zUi4%COmZstHcH%8+LLUxr9^8@=<@B=a9>Mdh}NwC`?XlGUOZ$eu=KdeJkXpPLnVML zHsntp%1C9Pe9RaSofKYJLaM4)qc8fU9DP|Hn94RLTvrw;-u2<@RmSHvPPSL|^pj_~ zy1};)D*F-L&f5<)PbZFvqUO%PP|>?da0h8M2JIV{6-9HXS*Yz~1+6GRhQ&pyqrOBBRcpHpC8v=b0KRneLz~JSP}bRfniV zO<0avT@_n#oTWf>EmP#AI+&sn;%zaA_*aOR57FgZAW(aK8Te{M`lF+&Rbp9%%=B+& z$HVdZzIgrAgs@+1@QMDen~^TAvwB_04unwb&WBMsv+07vQUA^c`mR~SE)!lGB3k#d z4v2M#Qqb&}E0hm$p*m*i?3JP|+M^!K+wl$993D?tGMS6b+8bXp^bIR~n@SoI^EH*I zkdL{e2SQnCcOc*gVeCsk)cjeVoEJ%r_UH- z#^BI~Aqo45C`d}*53%WTi27Slj|I^3BdedT##QRumb-!3}FVw>mE5(z+#_c3RhJNd9fSZ&v$@|UosXtH==g`XKDHo`M? zzZG)IW*XRxO2numS_$TtOx7oX6`3sp*gUiihnl3g>Y+W>W?95Bp{OW2J7KAW1!h#j z78AWS#`w@XXc9&wi#CCnLlR|Nr44xwwE`PNwn$gzF$88KX{!Q}=ZY3?JwZ4DpfQLj zB0~iF)_jvg9Rvde)w0f)Z4#S)iJzD5jQ-tt$smQZ&zvI2IoP{f}v7u5P0h8LM zGEHife%1Y|?f#Y?i~47}u;AkvK_aeO&tJNeQl=_3bq+@*3u>%T%Z&8fkLminpL8q$ zdIcR>8m20j?M*or=?mH1*WL7gnqh1eeog+@l4mQ_m_>LqYXmf$oAPL`GGK^2x=AH^;HtXo!CZ%M&Iw|@*x-jE+ZwZ$ zEJcc{Y>pyi1a3s#%;8|n4^lT&*FA}?E-$%f6jM%h@F^O?vB>HTi20W!m7Zb?eOIfE>PQ+i=mJw_Q8K);ChO zj?y#I!VodV*`|i(*yt<$R0R2)Y6KhOS9k+(ZdZ)*y=4m0AxIi`@Lxm6xjZeqJLXU$ zoDXEkzeF9&+8|NChveTK5EKrBIeJc|6mCffM(ge}8jM$(w*=$?F7WO}y_alEnGkjk zVj{If@B<}f+`gt9L7g z1ShRGakz(td}Z+c`wKo{hUkV22q&|lqFVx=n6Fhkslm>}JkgU=FMzA81x zon(FDFK-Sw z&*#Vs?-In*_haau52-;;Jzm;>L~-%@B=I7B7SjnxRPhL3@%i))zkNCqW0UF6ivgyw zb$ZjN^-_n0J;RXwZ1DA+y4Clv6N&3E2q_G9Kau=l>|HK#XCF;Uwgx%{C>NQb!nIKyE-qhH;c<#&kz;r zH|585WK&~*?lJKs)@O~%AyUjNranplZA(<2Dxfz<57E^VSlj4YFSNPKgLl}}(-+8f zL_$LJ+u>~Kmhm;a_yEg+R~Z1UkLrHQSuO+RH%XKUELAMUEagZ1gDIWVTJKXVN4Hf1 zvKoHZPoU;t8BAYGEh(2U4gCmz&O8j}Ya%Zzv(M?PF0Xgp)3XruMDb8Ihsb^erf~O< zG-HK*`x-c9M(6Uav7s}P3EGueg%rO<&k>}k@LCUP#3!36UY@yIQqV9X&SR_qYLbSd z-u?_tT*OZh+Mj6U=Zm#F?tFmUy6bT69Oo%5`f{| zHEU#YL9!o5Ao2mix?57J~$ZkE!fE6cBDaM&|DBFoc*?k4)~ZL|fP zwz)#S2S?TpdM)^N4Ujc<`N620ipi2vRCc#ZlXuL|WWkkwA3Fyy#jHomIoZ)2dGxo8@?#EH*b~X0k)GK@`V?-;QZFWo; z%rwdo-qAhlm2ayRlF*x=->Vwv5;=I=EO{0YA{#%MbE|C_LevU-a@unBwK8eAFa+4< zaDRI0^T<+UWaQUZfu4hF>ud-&e_inP{Bp6gGjtbt-lh`pS%G7P83RWy{MA)HKzz0U zB}JueK>4ny^>LLsFdsf6A-|;*#fk^Ba(OljdG3JuKU7sy!@J-4^yg7w)$HU6e;%#7 z_=@b7HO27#9WtsEJf`xhFRK8BX$5*`4+97Mhsxm^+O3C-!)YF&-rg9#TtJmK(N#Y8 za!-%Xa=HjpQ5EU6Ddy4Y&>`dCUP5eX0AAUiKevcg+uyoEfF{^lsv6HTsVRG$o<4kO zbE(rZEuqzm1gjg{cc#Njl?|gDp9{eVZA{dJUrd~{mEZsbAPs}A}~g-CRxvi4xmeW14$W?&EEh+a-ajn zmHXv8WiimNnEQIwnK39LqpNr8AZnQEje;r&!x(`^Y6h z97Y?(IbfzTm14#)s!hduF@eLU0BcfNZ}tdDhxLJa7}lygU$1cQHBBv|G=^lUDMTBD#2`U>jwF5 z^&F7K{F}P?x587?e%SprW?aWo4An63cBb5N{;FXt+;B~|pP~y~MgGATna=dQzdg^Y zsBSC&1*m?l^%H5i4OQ|(-|PpkOW>Mx+Gwgn9+p4$}G&f24=owD@gQ?E7+^7~0?$kAu zuU;$@{y+|p8^*(Kt=4?ZzBD9igZCKu2M)1Q6XzAB_P-N|U>dKPL55Ag5*B5+w%mNB(4C0Um=sl0v@Fso*k^Kp7v4*M+d ziTm1XKe?!;-L^Q~UlaQp9EoK8ev4-np|8~e;j0pFim<_~L+~3T$-jRC{c&;XE-%8H*1ONr!J(6QOhnUZDUQjv>H8!WmNIQ!Li6+ zK2doqu9nBIdk?E9Q>eLt?!ZRTYm;Bgp9pQyC-0DFQRG0hq_tu3AmYoqNm3ty`z<@vdWIO?+p#|YRFpV zU&V1_u&56{XqqmPr<~B=MNg&-Gf0{>$)&nyS)L6v4p))TKE?b9-V4N=kL)b6sy7*r zrJ(}kIh>nUCqgHbxY7>J>I|-oO1N}TSv)YhW=!AGU!qV=Y?G2J?fO#FApyCst&Cs5 z0>ufl2y(`sdAaLie3}(X26^Rd6Rg9;1CSZnO14BWnZvXYlWVzpNwDz@0bfz%YZtX{ zMHSs&ji`=&#-mc#J4YMulQXaOFW29AXd<63{5~z?UB$apvW1Yt^sESU=u$I-^u@Co zo)k=p^e2OLB=C=ZNU?BQF6$~flvwsfqlv~2MF8nFP`T{vUXG~W{4-9hXc zLU5Gr%|$=!@ZW@HiQPt{0$F0-wv9qZExt)(D#jlY{(D^Oc|MxQ-mg14&bAa`?{DL`ngh$7dUJ;E2( z!oWCh1fD6m%w_*5{XG zb1LVpai$JF^=Hb4;`=a}g-uN{I=+v@=hU;z#ftz+Y~WR+4$TAb>8?K;BJaETsM0f` zTWG%dPzeA1sHjESDo|vCvTi!`B2pbW?-{3}tlOpu#A8PFBxU}!uY>{^J%&LKO=PMW zGZz%+IBZl3UOHb#g}m2Sf+m~=I}ucG+qf;!KLZ0vK$ zTXbFqhIN8Z3J$iOAlP-U*Te4Czll8j7WFNCALx{6tKH`0k-Fgc5=FNU+-qHbjeC6@ zE$E{L%qTFi;W98|;jjTk#zzL+)&1F~ZrBw3fLrdQjH9dGz45BPlxGEW4J$(o5f^{= z!?Yh!GtFEL>HBGEpmt9`Otc+|^^;3N+U(lX)$P*EPGu&%cD#ni zZY*Sg^`cN6C`se_g5f?a_lRVcDwxQB&8Re^%qt7 z85cv3_;(bbs0k1z3x8~GJfy{Bu)Umob@?LtEA!tbJU}nQZC^8Ur5cX}l~WvrTQl?z z{S+Xyg<&rp6;jtntLu<-z!WMW7lKozDZVD5=5lViuMEBgw$NHtd?NtJjFGV$I_G6q zv+?xBA?qf>oZzdZPGWvqtha=WA6Zyu2LLTJhAx91e=ReH0RS~FSXY0M@+^&Zxbuu< znjMEa#glw<3>6AWoPi$k%OQ%k=bCdD0XAM?8oB?RE2&n1NNMuJse?Nx;@g>{=i|uF zZvE#=Zm+&jl{-3D<3PS|@At6V#r$VMCIZc+A+{qwl@Si7vT}$g+LTC~LqJX)fK z{E}ydJpubM5`U>FB$B)|SXpdY{dTIk*_eKCk8x_&G}wO5(s7J&AyP{FRU_tUde&3M zpJyvZ7>H!-+1|Q`?i6){1LCFr>ngwsG;kFp!X0wXd6!-13`?{T*2S*yja9R>Ay*EV_hcvBb7LVzy4LG|vnLAg3D_iLa$$Fm~-vx@s*_m8NAClM((jCyzK$^g;xwm$_`CyARD&@t4SZ~ zktq0d=`GDI>Fj!F0?vm{TcCCe2iAbQKyuS3ebe`61V_9g!gJ2OC1WK?qWY3*k;MM9 z-v;M_Nj0#9vI!%CpF%dUF)Yc6*izE_3y56{Z4a81xxEvJ^#tAX-x4$S4DmI6+*3N8 z^F4>i9LDKJvDp*!Wd4CglM4#yCVV99OtDzaa7hL+_I1+QNF=xuHn$irlV#Pb6{jaQ zm!EG7O^H0Zz>J=VLcdgqw3ypyHTe}QFYy(cY@iD0GEO0S(B#~FN3SCGP(jwE=Q&WU zZ2Z*}m!|=Db(*W+L-)2&e3`>HwNec@a!~lAGbqJEZH-v@T6b>b5JYLlUa2{2YC{q5 zLUqI|wx((|8^cX3AG$NZ9c1ZVTpPWtBz>hLo3bl^T2HEw^Acb)q|!6i);4QkoHf^J zzjDuziD^pqbMVLBL_@>RSAogu%f&-hTe@y{2aJda?8b5$=~JnifNDe9=6LNsujIsn z&8^NOV1-vL$zEl)wf!`>s>mJ%90!_hqp(w>T&>hgu9M*7Bs96si?b|UIybCkHeQq+$nnYlGgmTJ1Tq9%U*`PdVSzc1>I!9aDa(>F*E?z_ zS^B}07~@$lzm`)+aXqS^G~;Z)c}g-fZ@0xKos2WBE2}|!1DZ}gV;j+TD4LnV>nB?9 zDaab7_iEOVEdba0g@01P>4pD-wx$QC5v`J8|8&ft1_UuFIrweia95|z%a@UUXYC8~ z@~I^!B69`fnGeU=Mg6&<@jkq0roMb--ujLXb7A+l32i3)Q~NihQ?0HOo>K%tQ%^Z@ zPYwKuL{Ggef;Zb(_DxP>tH&)K^;Xn7K0kXv0d`DC0uq=LKN-D$-R;gi{@W2kS!F$a z_*43RWzxc^0DW%-hO>1yPKIjGK)tXW;)Y92(#b&c7n+ugHN<3@Od*>fX5;Sn!mWjD zFvJ>0&Y*~Z*u!#q)peTd)s^4#C9rmG7r3W6M&>;&oi0F1Yc5k7%nDXBwhgh^s!Nt| zxN4bkHJ15I5&YfBn`f4~?&PsS2FU;0_4FTZ&AV3MVyBCPBH<-U+G zkb0ZpoQ09q<+&Ia?$WLx+@$$GXD`g!5)6ZtMUl6@t7p)eP@KCaVC%xm!)c1-xv%Sm}2r8HR>fbM&i^Mu&-TN1O+#<$1*OsM6Np zi#|G@H}^N|RNmVyM`3^{H|HG(H^z0DR!F&a$(mZz-vEVyk%d7LN)NlZvnKSkVvUjR zQaNq#)BI_*HvmzPWlzg3nLIE7E!0nGB+W*;lbQ!~^p)znD zfmat$5jdZmx<(O`E`%MfjFUnB{gCUZegf@m1UG(OhKJ``|_H%9U#x>mQAd}P&{6EHu|TXC$*IrUKq za7y$ndGpWa0yyc9(V3zNowe8n?B_rkk)nFeIo?}lGrw$$AJt|vI?zRDWQQR9=UY!dnW~ChTTs|`G3K=)i<%f z+^VSI0k;S@`Sz%ydtYCyB#Ug$(AN2^kJkHWT>#za^-+=PAHiA_P&5Mcf-r2?b~cM@ zWNRPa_fhVhTmSi`p7|dp1rvZeq6HS7%~AmYl~~z8<^|HujKvaAtsryZpPcr46qI0b zE=RN$08AEdfjn^qu$6O{s^&YWtqG~Ty(+gNE28r%x|=18xS17k%Z+j+UhrG0Nae7y z*Q0V@=!cq`w+U-A zrG+=_5)aD+X8r_T^=vR{qV7&-Pzat%!1XV2HQi<|$Ny|_(C`3;$aF2BJ$)giZcN9f z)#M6LqMEJ)qImb5b4cGAfa$gvdxwkL;WhOYVPtDCXLpB#dYZ{8*0B`pIl^`(M^1F8 zt7{(s>x{SO`2nE`scKaa-9it#?=3 z2{pXtelrf={39}Yq|ADZND0h14k?`SblUS+=20~s1V2%L777<1$RZn+*l)M>hT>;K zo8f}>fCIAQ9u2UzZadFAYUuyyFW_?4E`kB_#V@p+kbmEQ3K$WK#tcC=`jaCSoFQf) zvhT(9(9R*s@mK=J!DiEoZ5IOzTBgxvo9PdTTIjFzXU}xXkVf`Eukv5;r+P(_v7#KY zP8mV%lu2YGvvf$I^1@ zCgcHcMc~Z0@4mcKfts~b(>|k^@w@{jfrFfv%eKr*`66dIR{u9jE@E_0qeh;4pNu-v z%#4^VXTtV61!-*`KpfaC`2blW$2d9R1fu%xcMD)6Y^-^na$+|JeYv-zU?Dj!I&_mP z-X@a38ri^|5XDAJ2jZO;l9ao0W4*B5_Xag^wr1G$UiimZJ2hNIN2KW+sbh8l*iVll z(zqty$a+9gmxp1x#WlI6aaERC@i}|jsd*=k`&WKJtzHQhZ3^yxOyR8=NT3O3Z9pLN zba%bU9RpH~q4x@+Z%-0fdjVdxx|HWy>WxPs!LQwv~OuSTmLB#q2kE4GzS$ zBuy^~FVf3#m6>LrIn%}23(|aj1ZzjSuQmCbN={(M{nP~W6ee6iJ1}f5f~G76 zY!BXCW}J+F_bNaNFCI-GZV~#f*@(UvUb9P(Q0W6}KT@ezT}E0)K$HHG@YjOFV^$R_ z%Z7(MHaEKph~^6lGY3@viR1s~3%z{+Vk>Rt(RS;2>!b$4%$kk2_e)V=slx)8&_Oao z_kTO+8@# zqtAic|58Lh6Ugi6vV=E;k?}WcO$)zDsyBsK9YN)S>&N@vF+Qzam1ipk_HikNkf`hdB&^9iq$ahqLA2V_T3 zB0c_j@4exl{3Maw-9Df-Rmc0GiwS}c_Ux&Ieb|9iZJi;zxI2&UolHOv_3JMN!nk;E zTlTd`h6|pwZ+5o57j|vt0&7RkFq{o$kp)LbKzE8o%@|92n^ow)xDm|tJJxl%0jHKv z!`cq_QX>41hOA)P<7ykFGTgrQhXt~-`1bN%RdYXsKEjiWArUo$)QEk3|-2# zp^oMhcE>EMISZX>^svRByjDhS;MtiLRl%D^riYUKiyx%j?r8fd zbHB#ce!s!_^p)k)SZ3TvXds?ZH${fG&+Sl$WRjvEe%mWv4I>FHc>0D_dAg$h+ zvHmIWl@q8i-Hg2*$PBHaYRD4spW{eP z+$IBs{R3974||@6Y5YOmFj5$q968k$vr@Bt;VL3UzQ_CLVp~l5?l4&`rl0;=<}708 z!31y|0Ud-}h|O%HJ<0FKS>lzTPMpc1{^ ze^`hp2hSY975$J9wVoJo@^7=cg9H>Uuvh=Sp(sgAvIxgX;h8DSzu- zj?71z-2LBxvav97J`uWVZEyVnyV$iz zvyb@iZndUF?+SQ~*r=Kjmqf1r1l%ZN0n9>X9d$kRxVmRBNZ`Nj59(hHO28}H;UA^` z?+2YihCZPlUk`Yzqr~&-PyhFkVbr$MN}qMJ&k{__mA${;{y x6g5XI@{3{UXlVEMl5YZ6(9qBxq5|~?XaY?V7`M+hD}cYCsVHc|s^zRB{~xd{0=57E literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_sankey_v4.png b/all_static/images/migrating-to-v4/migration_sankey_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..833ca8c786d7641eeba4e55b0b1ea111d1e5feea GIT binary patch literal 68596 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 N3NotFHBv?){|90jIV%7F literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v4.png b/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..70fc6d82423265f63ad7544a16a0598449dc4a09 GIT binary patch literal 58887 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 literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v3.png b/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..43230aa4a55e922e5dd01e4e5e939e2874fbbb82 GIT binary patch literal 29802 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 literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v4.png b/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..66b5e6c25cb4b87ef9b281f56f7d3ce9ccc4226b GIT binary patch literal 29948 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 D2s5>7 literal 0 HcmV?d00001 From 7141949a50e5f0a1fe0a16d121d454ee4fcb2b73 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Mon, 20 Jul 2026 13:28:15 -0600 Subject: [PATCH 05/25] Use spaces instead of tabs --- .../2026-07-17-plotly_js-guides-index.html | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html b/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html index c6611aab2..85859b6a6 100644 --- a/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html +++ b/_posts/plotly_js/guides/2026-07-17-plotly_js-guides-index.html @@ -10,16 +10,16 @@

    -
    -
    -
    -

    Plotly.js Guides

    -

    {{page.description}}

    - {% include layouts/dashplug.html %} -
    -
    -
    +
    +
    +
    +

    Plotly.js Guides

    +

    {{page.description}}

    + {% include layouts/dashplug.html %} +
    +
    +
    - {% assign languagelist = site.posts | where:"language","plotly_js" | where:"display_as","guide" | where: "layout","base" | sort: "order" %} + {% assign languagelist = site.posts | where:"language","plotly_js" | where:"display_as","guide" | where: "layout","base" | sort: "order" %} {% include posts/documentation_eg.html %} From f4b10cf16b6b246c7b925960384d1fe22a49ff72 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 22 Jul 2026 16:18:15 -0600 Subject: [PATCH 06/25] Trim down migration guide --- .../2026-07-17-migrating-to-v4.md | 945 ++---------------- 1 file changed, 102 insertions(+), 843 deletions(-) diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 383172ad5..39c83ce0f 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -1,10 +1,10 @@ --- -description: Learn about the changes in Plotly.js version 4. +description: Quick checklist of code changes to update existing Plotly.js v3 charts for v4. display_as: guide language: plotly_js layout: base name: Migrating to Plotly.js v4 -order: 1 +order: 2 page_type: u-guide permalink: javascript/guides/migrating-to-v4/ redirect_from: @@ -14,181 +14,69 @@ thumbnail: thumbnail/mixed.jpg --- # Migrating to Plotly.js v4 -This guide covers breaking changes between v3 and v4 and how to update your code. -Most figures will render without changes; the items below call out where output -or accepted input has changed. +This is a quick checklist of code changes needed to update existing Plotly.js +v3 charts for v4. For full detail on every new feature and breaking change +(with images, background, and edge cases), see [What's New in Plotly.js +v4](/javascript/guides/whats-new-in-v4/). + +Most figures will render without changes. The items below call out where +existing code or input needs to be updated. ## Contents - [Minimum Node.js version](#minimum-nodejs-version) -- [Color library swap (tinycolor2 → color)](#color-library-swap) -- [Chart Studio APIs removed](#chart-studio-apis-removed) -- [Mapbox traces and subplots removed](#mapbox-traces-and-subplots-removed) -- [Country name lookup (country-regex → country-iso-search)](#country-name-lookup) -- [TypeScript types](#typescript-types) -- [Scattermap icon defaults](#scattermap-icon-defaults) -- [Map subplots auto-frame to data](#map-subplots-auto-frame-to-data) -- [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default) -- [Geo `fitbounds` framing for antimeridian features](#geo-fitbounds-framing-for-antimeridian-features) -- [Geo subplot zoom limits](#geo-subplot-zoom-limits) -- [Shape legend marker outlines honor `line.dash`](#shape-legend-marker-outlines-honor-linedash) -- [Overlaying axis `tickmode` defaults to `'sync'`](#overlaying-axis-tickmode-defaults-to-sync) -- [Sankey layout algorithm update](#sankey-layout-algorithm-update) +- [Removed color inputs](#removed-color-inputs) +- [Removed Chart Studio APIs](#removed-chart-studio-apis) +- [Removed mapbox traces and subplots](#removed-mapbox-traces-and-subplots) +- [Country name lookup](#country-name-lookup) +- [Auto-fitting on `map` and `geo` subplots](#auto-fitting-on-map-and-geo-subplots) +- [Scattermap rendering changes](#scattermap-rendering-changes) +- [Shape legend `line.dash`](#shape-legend-line-dash) +- [Overlaying axis `tickmode`](#overlaying-axis-tickmode) +- [Sankey layout](#sankey-layout) --- ## Minimum Node.js version -*Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* - -Plotly.js now requires Node.js v22 or newer. The previous floor was v18, -which has reached end-of-life. - -This only affects you if you: - -- build Plotly.js from source (contributors, custom bundles) -- run Plotly.js in a Node.js runtime (server-side rendering via jsdom, - validation scripts, image export pipelines, etc.) -- install via a package manager that enforces `engines` strictly - (`yarn`, `pnpm`) +Plotly.js now requires Node.js v22 or newer. Upgrade if you build from source, +run Plotly in a Node runtime (SSR via jsdom, image export pipelines, +validation scripts), or use `yarn` / `pnpm` (which enforce `engines` +strictly). -Consumers who only load the pre-built browser bundle -(`plotly.min.js` or a partial bundle like `plotly-basic.min.js`) are -unaffected — the bundle runs in browsers, not Node. - -If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a -warning on install but won't fail; `yarn` and `pnpm` will refuse to -install unless your environment satisfies `engines.node >= 22.0.0`. +Consumers of the pre-built browser bundle are unaffected. --- -## Color library swap - -*Implemented in [#7536](https://github.com/plotly/plotly.js/pull/7536).* - -In v4, Plotly's internal color processing was switched from -[tinycolor2](https://github.com/bgrins/TinyColor) to -[color](https://github.com/Qix-/color). The new library is actively -maintained and supports modern CSS Color 4 syntax, but a handful of -behaviors changed in the process. - -### Color string inputs that no longer work - -**`hsv()` color strings are no longer accepted.** - -```js -// Before -{ marker: { color: 'hsv(200, 80%, 80%)' } } - -// After — convert to hsl, hwb, hex, or rgb -{ marker: { color: 'hsl(200, 67%, 47%)' } } -``` - -A color in the unsupported format will fall back to the attribute's default. - -**`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer -accepted.** - -```js -// Before — tinycolor parsed this as 0–1 fractions -'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) - -// After — the underlying library reads them as integer 0–255 (truncated) -'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) -``` - -Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` -(or any other supported color string) before passing them to Plotly. - -Mixed-format strings where at least one component is `>= 1` (e.g. -`rgb(255, 0.0, 0.0)`) continue to render correctly: the new parser treats -the `0.0` components as integer `0`. - -**Numeric color inputs are now rejected.** - -```js -// Before — silently accepted, rendered as near-black -{ marker: { color: 42 } } - -// After — falls back to the attribute default -``` - -If you were relying on numeric color values being coerced, convert them -to color strings before passing them to Plotly. - -### Color computation output changes +## Removed color inputs -A handful of Plotly's derived colors shift by a few RGB units. Visible -places where output shifts: +Three color-input formats no longer work — invalid inputs fall back to the +attribute's default: -| Where | Example | +| Input | What to do | |---|---| -| Heatmap auto-contrast text | A `Jet` colorscale heatmap shows text flipping between dark grey and white on mid-luminance cells in the teal/cyan band | -| Auto-generated `insidetextfont` color on bars/waterfall | Same threshold shift around teal/cyan-ish backgrounds | -| Sankey default hover color (dark BG) | RGB channels shift by 1 unit per channel vs v3 | +| `hsv()` strings | Convert to `hsl()`, `hwb()`, hex, or `rgb()` | +| `rgb()` / `rgba()` strings with 0–1 decimal fractions | Convert `'rgb(0.5, 0.5, 0.5)'` to `'rgb(128, 128, 128)'` (or any supported string form) | +| Numeric color values (e.g. `color: 42`) | Convert to a color string | -### New color formats you can now use - -The new library accepts CSS Color 4 syntax that wasn't possible with -tinycolor. All of these are now valid anywhere Plotly accepts a color -string: - -```js -'#ff0000aa' // 8-digit hex with alpha -'#f00a' // 4-digit short hex with alpha -'rgb(255 0 0)' // space-separated rgb -'rgba(255 0 0 / 0.5)' // slash-alpha rgba -'hsl(0 100% 50% / 0.5)' // slash-alpha hsl -'hsla(0, 100%, 50%, 0.5)' // hsla -'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) -``` - -See [test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) -for a working example using each format. - -#### Browser compatibility - -All of these are parsed by Plotly in JavaScript and normalized to legacy -`rgb(...)` / `rgba(...)` before being written to the DOM, so the browser -never sees the modern syntax — your figures render the same in any -browser that ran v3. The note below only matters if you also mirror these -strings into your own stylesheets or template literals. - -Native CSS support: - -| Format | First supported | -|---|---| -| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | -| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | -| `hsla()` | Universal since IE9 | -| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | - -`hwb()` is the only format here that won't parse in browsers from ~2020 -or earlier. Everything else is safe in any browser shipped in the last -seven years. +Auto-computed contrast colors (heatmap text, `insidetextfont` on +bars/waterfall, sankey hover on dark BG) may also shift by a few RGB units +around mid-luminance backgrounds. --- -## Chart Studio APIs removed - -*Implemented in [#7812](https://github.com/plotly/plotly.js/pull/7812).* +## Removed Chart Studio APIs -The legacy "Edit in Chart Studio" link, related config options, and the -streaming token attribute have been removed. The `sendDataToCloud` modebar -button and config option are retained — only the duplicate -`editInChartStudio` button and the on-graph "Edit chart" link are gone. +Config options removed from `Plotly.newPlot(gd, data, layout, config)`: -### Removed config options - -`Plotly.newPlot(gd, data, layout, config)` no longer accepts: +| Removed | Replacement | +|---|---| +| `showLink`, `linkText`, `sendData`, `showSources` | None — remove them | +| `showEditInChartStudio` | `showSendToCloud` | -| Removed | What it did | Replacement | -|---|---|---| -| `showLink` | Drew an "Edit chart" link at the bottom-right of the plot | None — remove the option | -| `linkText` | Text for the `showLink` link | None — remove the option | -| `sendData` | Whether the link uploaded data or just linked to a file | None — remove the option | -| `showSources` | Hook that drew custom source links next to `showLink` | None — remove the option | -| `showEditInChartStudio` | Pencil-icon variant of `sendDataToCloud` | Use `showSendToCloud` | +The `editInChartStudio` modebar button is gone — switch to `sendDataToCloud`. +The undocumented `stream: { token, maxpoints }` trace attribute is removed and +now schema-rejected. ```js // Before @@ -204,756 +92,127 @@ Plotly.newPlot(gd, data, layout, { }); ``` -### Removed modebar button - -`editInChartStudio` is no longer a built-in modebar button. If you were -adding it explicitly via `modeBarButtonsToAdd`, switch to `sendDataToCloud`: - -```js -// Before -{ modeBarButtonsToAdd: ['editInChartStudio'] } - -// After -{ modeBarButtonsToAdd: ['sendDataToCloud'] } -``` - -### Removed trace attribute - -The undocumented `stream` attribute (`stream.token`, `stream.maxpoints`) -has been removed from every trace type. It was a hook for the Chart -Studio streaming service, which is no longer reachable. If you have -figures containing `stream: { token: '...', maxpoints: N }` in their -trace objects, delete those properties — they're now schema-rejected. - --- -## Mapbox traces and subplots removed - -*Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* +## Removed mapbox traces and subplots -The legacy mapbox-gl-js–based traces and subplot type have been removed. -The MapLibre-based `map` family that has shadowed them since v2 is now -the only map implementation. - -### Removed +The legacy `mapbox`-based traces and subplot type are gone. Rename to the +MapLibre-based `map` family. For deeper background on the switch, see [Mapbox +to MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). | Removed | Replacement | |---|---| -| `scattermapbox` trace | `scattermap` | -| `choroplethmapbox` trace | `choroplethmap` | -| `densitymapbox` trace | `densitymap` | -| `layout.mapbox` subplot (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | -| `layout.mapbox.accesstoken` | None — MapLibre uses open tile providers | -| `mapboxAccessToken` config option | None — see above | +| `scattermapbox` | `scattermap` | +| `choroplethmapbox` | `choroplethmap` | +| `densitymapbox` | `densitymap` | +| `layout.mapbox` (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | +| `layout.mapbox.accesstoken`, `config.mapboxAccessToken` | None — MapLibre uses open tile providers | | `plotly-mapbox.min.js` partial bundle | `plotly-map.min.js` | | Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | -| `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | +| `scrollZoom: 'mapbox'` (e.g. `'mapbox+cartesian'`) | `'map'` | -The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, -`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), -so the migration is usually a rename. +The attribute shape is unchanged — usually a straight rename works: ```js // Before { data: [{ type: 'scattermapbox', lon: [...], lat: [...] }], - layout: { - mapbox: { - style: 'open-street-map', - center: { lon: 0, lat: 0 }, - zoom: 2, - }, - }, + layout: { mapbox: { style: 'open-street-map', center: {...}, zoom: 2 } }, config: { mapboxAccessToken: 'pk.eyJ1...' }, } // After { data: [{ type: 'scattermap', lon: [...], lat: [...] }], - layout: { - map: { - style: 'open-street-map', - center: { lon: 0, lat: 0 }, - zoom: 2, - }, - }, - // mapboxAccessToken removed — MapLibre needs no token for the - // built-in styles + layout: { map: { style: 'open-street-map', center: {...}, zoom: 2 } }, + // mapboxAccessToken removed } ``` -### Built-in style values - -Every built-in `style` name that worked on `mapbox` still works on `map`, -but the tiles backing them differ — visual output **will change** even -when no other figure changes: - -| Style name | Old (`mapbox`) | New (`map`) | -|---|---|---| -| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | -| `light` | mapbox.com light | Carto Positron | -| `dark` | mapbox.com dark | Carto Dark Matter | -| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | -| `white-bg`, `open-street-map` | unchanged | unchanged | -| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | - -The three Stamen styles (`stamen-terrain`, `stamen-toner`, -`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API -key. Users who need them can supply a custom `style` URL. - -### Custom style URLs - -Custom MapLibre / Mapbox-style JSON URLs continue to work. The -`mapbox://styles/mapbox/...` short form is no longer resolved, since it -requires authenticating to mapbox.com. Substitute the full URL of an -equivalent open style, or self-host the style JSON. - -### Static export - -The Mapbox logo previously injected into static SVG / PNG exports of -mapbox subplots is no longer drawn — MapLibre has no equivalent -trademark requirement. Attribution provided by tile sources (Carto, -OpenStreetMap, ArcGIS) is still rendered inside the map canvas. +Built-in style names still work but use different tile providers (Carto, +ArcGIS, OpenStreetMap) — visual output will shift. Stamen styles +(`stamen-terrain`, `-toner`, `-watercolor`) are no longer built in — they now +require a Stadia API key. The `mapbox://styles/mapbox/...` short-form URL is +no longer resolved. --- ## Country name lookup -*Implemented in [#7856](https://github.com/plotly/plotly.js/pull/7856).* - -`locationmode: 'country names'` on `choropleth` and `scattergeo` traces is -now resolved by [country-iso-search](https://github.com/plotly/country-iso-search) -instead of [country-regex](https://github.com/etpinard/country-regex). The -attribute name, accepted values list, and ISO-3 output are unchanged — -the difference is in *how* a name string is matched to an alpha-3 code. - -The old library walked a table of country-specific regular expressions -and returned the first match. That made it lenient (substring matches -worked) but ambiguity-prone — strings like `'Republic of'` could -resolve to whichever entry's regex hit first. The new library does a -sanitized exact lookup against a curated alias table, which is stricter -about ambiguous input but accepts many more legitimate forms. - -### Names that resolved before but no longer do - -Strings that only matched because of overly broad regex fragments now -fall back to the unrecognized-name log message and the location is -skipped. In practice this hits inputs that weren't really country -names — partial phrases, generic descriptors, or strings containing a -country name as a substring of something else (e.g. -`'Republic of Foo'`, `'Not Iran'`). If you were relying on a -non-canonical form, switch to the country's name, an alias, or the -ISO-3 / ISO-2 code. - -### Names and forms that now resolve - -The alias table is larger and the input is normalized before lookup, -so a number of forms that previously failed now work: - -```js -// All resolve to 'FRA' -'France' -'FR' // ISO 3166-1 alpha-2 -250 // UN M49 numeric (number or string) -'\u{1F1EB}\u{1F1F7}' // flag emoji - -// Historical / native / punctuated names -'Burma' // → 'MMR' -'Türkiye' // → 'TUR' (diacritics stripped) -'Cote d\'Ivoire' // → 'CIV' (apostrophes ignored) -'St. Kitts and Nevis' // → 'KNA' ('St.' expands to 'Saint') -'The Gambia' // → 'GMB' (leading 'The ' dropped) -``` - -Matching is case-insensitive. Sanitization also collapses internal -whitespace, drops `.` `()` `,`, maps `&` → `and`, and turns `-` / `–` / -`—` into spaces — so cosmetic punctuation differences in your input -data no longer block a match. - -### Disputed-territory codes are retained - -The user-assigned alpha-3 codes Plotly historically recognized for -disputed regions still work: - -| Code | Region | -|---|---| -| `XAC` | Aksai Chin | -| `XAP` | Arunachal Pradesh | -| `XBT` | Bir Tawil | -| `XHT` | Halaib Triangle | -| `XJK` | Jammu and Kashmir | - -These are layered on top of the standard ISO 3166-1 records via -[src/lib/custom_country_codes.ts](https://github.com/plotly/plotly.js/blob/master/src/lib/custom_country_codes.ts). -Whether a feature for them appears on the rendered map still depends -on the topojson resolution in use. - ---- - -## TypeScript types - -*Implemented in [#7680](https://github.com/plotly/plotly.js/pull/7680) and [#7868](https://github.com/plotly/plotly.js/pull/7868).* - -Plotly.js now ships its own TypeScript type definitions. `package.json` -points `"types"` at `lib/index.d.ts`, so the types are picked up -automatically — no separate `@types/*` install is needed. - -### Importing - -The package exports a default namespace, named exports, and a global -`Plotly` namespace: - -```ts -import Plotly from 'plotly.js'; -// or -import * as Plotly from 'plotly.js'; -// or -import { newPlot } from 'plotly.js'; -import type { Layout, Data, TraceType } from 'plotly.js'; -``` - -A minimal typed example: - -```ts -import { newPlot } from 'plotly.js'; -import type { Data, Layout } from 'plotly.js'; - -const data: Data[] = [{ type: 'scatter', x: [1, 2, 3], y: [4, 5, 6] }]; -const layout: Partial = { title: { text: 'Demo' } }; - -await newPlot(div, data, layout); -``` - -### What's exported - -**Trace data** — `Data` (the union of every trace's typed data object), -plus per-trace interfaces like `ScatterData`, `BarData`, `HeatmapData`, -`ChoroplethData`, etc. Each per-trace interface narrows on `type`, so -using `Data[]` in your figure lets TypeScript pick the right trace -shape from the literal `type` value: - -```ts -const data: Data[] = [ - { type: 'bar', x: ['a', 'b'], y: [1, 2] }, // checked as BarData - { type: 'scatter', x: [1, 2], mode: 'lines' }, // checked as ScatterData -]; -``` - -Other exports: - -- **Layout** — `Layout` (the full layout interface), `LayoutAxis`, - `Legend`, `Annotation`, `Shape`, `Slider`, `UpdateMenu`, `Scene`, and - the rest of the component interfaces. Pass `Partial` to - `newPlot` / `react` since most fields are optional. - -- **Config** — `Config`, `ToImgopts`, `ToImageButtonOptions`, - `DownloadImgopts`, `ModeBarDefaultButtons`, `ModeBarButton`, `Icon`. - -- **Trace/layout enums** — string-literal unions like `TraceType`, - `AxisType`, `Calendar`, `Dash`, `PatternShape`, `XRef`, `YRef`, - `MarkerSymbol`, `HoverInfo`, etc. Use these instead of bare `string` - to get narrowing on attribute values. - -- **Shared sub-interfaces** — `Font`, `ColorBar`, `HoverLabel`, - `Pattern`, `Domain`, `LegendGroupTitle`, `TickFormatStops`, etc., - used wherever the schema reuses the same sub-attribute tree. - -- **Events** — `PlotMouseEvent`, `PlotHoverEvent`, `PlotSelectionEvent`, - `PlotRelayoutEvent`, `PlotRestyleEvent`, `LegendClickEvent`, - `SliderChangeEvent`, etc., plus `PlotlyEventName` for the union of - event names accepted by `on()` / `once()` / `removeListener()`. - -- **Animation & frames** — `AnimationOpts`, `Frame`, `Transition`, - `TransitionEasing`. - -- **Templates** — `Template` interface (and `TemplateFigure`, - `ValidateTemplateResult` from the template utilities). - -- **DOM** — `PlotlyHTMLElement` (the typed `Plotly.newPlot` graph - div), `Datum`, `TypedArray`, `Color`, `ColorScale`. - -### Notes on a few types - -**`Data` vs per-trace interfaces.** Prefer the `Data` union for figure -literals (TypeScript discriminates on `type`); use the per-trace -interface only when you have a value that is *guaranteed* to be one -trace type — e.g. a helper that builds a `BarData` to push into a -`Data[]`. - -**`Layout` is the input shape, not the resolved shape.** It mirrors -what you pass to `newPlot`. The post-coerce internal shape used inside -Plotly's own code (often called "FullLayout") is intentionally not -exported. Likewise `Data` is the input shape; resolved trace state -("FullData") is internal. - -**`PlotType` is an alias for `TraceType`.** Both name the same -string-literal union of trace type names; existing code that imports -`PlotType` keeps compiling. New code should prefer `TraceType`. +`locationmode: 'country names'` on `choropleth` and `scattergeo` traces now +uses a stricter matcher. Strings that only matched previously via broad regex +fragments (e.g. `'Republic of'`, `'Not Iran'`) no longer resolve — locations +are skipped. Switch to a canonical country name, an alias, or an ISO-3 / ISO-2 +code. --- -## Scattermap icon defaults - -*Implemented in [#7825](https://github.com/plotly/plotly.js/pull/7825).* - -If you used `scattermap` or `scattermapbox` in v3, three rendering details -have changed by the time you land on `scattermap` in v4: - -### Marker icons now respect `marker.color` - -`marker.color` on a scattermap trace is now applied to the icon by -setting `icon-color` (plus a small `icon-halo` so the colored edges -read cleanly). In v3 the property was set on the layer but the -underlying icons weren't SDF sprites, so the color had no visible -effect — coloring was effectively a no-op. - -In v4 the Maki icons are loaded with `{sdf: true}` and tinted with -`marker.color`. Figures relying on the icon retaining its original -artwork color will now render in the trace color. If you need the -original tint, pick a Maki icon already in that color and set -`marker.color: 'white'` (which becomes the identity tint for SDF -sprites). - -| Before (v3) | After (v4) | -|---|---| -| ![v3 scattermap icons uncolored](/all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v3.png) | ![v4 scattermap icons tinted red](/all_static/images/migrating-to-v4/migration_scattermap_iconcolor_v4.png) | +## Auto-fitting on `map` and `geo` subplots -### Maki icon set updated to v8 (via jsDelivr) +Both subplot types now auto-fit their initial view to fit trace data. -The icon CDN and version have changed: +**For `map` subplots** (`scattermap`, `densitymap`): set `map.fitbounds: +false`, or set `map.center` / `map.zoom` explicitly, to opt out. -- **v3**: `https://unpkg.com/maki@2.1.0/icons/.svg` -- **v4**: `https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/.svg` +**For `geo` subplots** (`scattergeo`, `choropleth`): `layout.geo.fitbounds` +now defaults to `'locations'` (previously `false`). Set `fitbounds: false`, or +set any view attribute (`center`, `projection.rotation`, `projection.scale`, +`lonaxis.range`, `lataxis.range`), to opt out. -A handful of icon names removed between Maki 2.1 and 8.2 will now -silently fail to load (HTTP 404). If you were using one of the dropped -icons, swap it for the nearest Maki 8 equivalent (see -[Maki 8 icon list](https://labs.mapbox.com/maki-icons/)). - -### Legend swatch always renders as a circle - -`scattermap` legend swatches now always draw a circle, regardless of -`marker.symbol`. In v3 the swatch went through the same code path as -cartesian traces, which only understands the -[Plotly-supported symbol names](https://github.com/plotly/plotly.js/blob/master/src/components/drawing/symbol_defs.js). -On map traces, that produced inconsistent output: symbols with names -that don't overlap the Plotly set (Maki-only names like `'airport'`, -`'cafe'`) rendered as filled circles, while other symbols (`'square'`, -`'star'`, etc.) rendered as broken/empty paths in the legend even -though they draw correctly on the map. The v4 circle fallback makes -the swatch consistent across every scattermap trace. - -| Before (v3) | After (v4) | -|---|---| -| ![v3 scattermap legend inconsistent](/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v3.png) | ![v4 scattermap legend all circles](/all_static/images/migrating-to-v4/migration_scattermap_legendsymbol_v4.png) | - -If you were styling the legend swatch path directly based on -`marker.symbol`, that selector will now always match a circle path on -map traces. - ---- - -## Map subplots auto-frame to data - -*Implemented in [#7884](https://github.com/plotly/plotly.js/pull/7884).* - -`map` subplots now auto-frame the view to fit the trace data. In v3, the -same layout produced a world view centered at `(0, 0)` with `zoom: 1`, -requiring the user to supply `center` and `zoom` (or drag/scroll) to see -their data. - -```js -Plotly.newPlot(gd, [{ - type: 'scattermap', - lon: [-122.4, -73.9, -87.6], - lat: [37.8, 40.7, 41.9] -}], { - map: { style: 'basic' } -}); -// v3: map opens centered at (0, 0) at zoom 1 -// v4: map opens framed on the three cities -``` - -| Before (v3) | After (v4) | -|---|---| -| ![v3 map with world view](/all_static/images/migrating-to-v4/migration_map_autofit_v3.png) | ![v4 map framed on cities](/all_static/images/migrating-to-v4/migration_map_autofit_v4.png) | - -Auto-framing runs on the initial render and again on data-only updates -(`Plotly.restyle` of `lon`/`lat`, `Plotly.addTraces`, `Plotly.deleteTraces`) -whenever the user hasn't overridden the view. Once the user pans, zooms, -rotates, or tilts the map — or explicitly sets `center` / `zoom` / `bearing` -/ `pitch` in the layout — auto-framing steps aside and preserves the -chosen view across further data changes. - -### Opting out - -Two ways to disable auto-framing. - -**Set `map.fitbounds: false`** — recommended for intentional opt-out; -explicit and independent of the view values. +Figures that already supply view attributes render unchanged. ```js +// Restore v3 world view for a map subplot { map: { fitbounds: false } } -``` - -**Set `map.center` or `map.zoom` explicitly** — any value counts as -user intent, including `zoom: 0` and `center: { lon: 0, lat: 0 }`. -```js -// Keep the v3 world view: -{ map: { center: { lon: 0, lat: 0 }, zoom: 1 } } +// Restore v3 world view for a geo subplot +{ geo: { fitbounds: false } } ``` -### Which traces contribute - -Each `map` subplot auto-frames independently, using only the -`scattermap` and `densitymap` traces assigned to it (via the trace's -`subplot` attribute). Each contributing trace's `lon` / `lat` arrays -feed the frame, with non-finite entries skipped. Traces belonging to -a different subplot (`map2`, `polar`, etc.) are framed by their own -subplot, not this one; traces with `visible !== true` are ignored -entirely. - -**`choroplethmap` traces skip auto-framing** because they carry -`locations` / `geojson` rather than point lon/lat, so their extent -can't be included without geojson bbox handling. When a visible -`choroplethmap` sits on the subplot, the view falls back to the v3 -default. Set `map.center` and `map.zoom` explicitly to frame the choropleth. - -### Antimeridian data - -For data that straddles the antimeridian (points on both sides of ±180°), -the auto-frame picks the compact crossing range rather than the -long-way-around view. For example, `lon: [131.8855, -179]` frames as -`[131.8855, 181]` (a ~49° span across the antimeridian) instead of the -naive `[-179, 131.8855]` (~311° the wrong way). - -### `map.bounds` is unaffected - -The `map.bounds` layout attribute (which restricts panning) is a -separate concern and continues to work as in v3. Auto-framing computes -the *initial* view; `bounds` constrains *interactive* view movement. -Both can coexist. - -### Relationship to `layout.geo.fitbounds` - -Both `map` and `geo` subplots now expose a `fitbounds` layout attribute, -but the shapes differ: - -| | `map.fitbounds` | `geo.fitbounds` | -|---|---|---| -| Type | boolean | enumerated | -| Values | `true` / `false` | `false` / `'locations'` / `'geojson'` | -| Default | `true` | `'locations'` (was `false` in v3 — see [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default)) | -| Re-fits on data updates | yes, until user overrides view | yes, every render | - -If you use both subplot types in one figure, note that `map.fitbounds` is -a straight on/off toggle, while `geo.fitbounds` also selects *what* -contributes to the frame (visible `locations` only, vs. the entire trace -`geojson`). - --- -## Geo subplots auto-frame by default - -*Implemented in [#7895](https://github.com/plotly/plotly.js/pull/7895).* +## Scattermap rendering changes -`layout.geo.fitbounds` now defaults to `'locations'` (v3 default: `false`). -`geo` subplots — used by `scattergeo`, `choropleth`, and any other -location-based geo trace — now auto-frame their initial view to fit the -trace data, matching the behavior of `map` subplots. Figures that previously -rendered the full world map (or the scope's default extent) now zoom to just -the locations they plot. - -```js -Plotly.newPlot(gd, [{ - type: 'choropleth', - locations: ['CAN', 'MEX'], - z: [1, 2] -}], { - // v3: full world map (fitbounds defaulted to false) - // v4: tight fit around Canada and Mexico (fitbounds now defaults to 'locations') -}); -``` - -| Before (v3) | After (v4) | +| Change | Detail | |---|---| -| ![v3 geo world view](/all_static/images/migrating-to-v4/migration_geo_autofit_v3.png) | ![v4 geo framed on Canada+Mexico](/all_static/images/migrating-to-v4/migration_geo_autofit_v4.png) | - -### How to opt out - -Two paths: - -**Explicit:** set `layout.geo.fitbounds: false` to restore the v3 default view. - -```js -Plotly.newPlot(gd, [/* ... */], { - geo: { fitbounds: false } // world view / scope-default view, as in v3 -}); -``` - -**Implicit:** setting any of the view attributes that auto-fit would -otherwise compute automatically disables auto-fit for that figure. Which -attributes count depends on the projection: - -| Projection kind | Projection-specific opt-out attributes | -|---|---| -| Any non-`world` scope (checked first, even if the projection is also clipped) | `center.lon`, `center.lat`, `projection.scale` | -| World scope + clipped projection (orthographic, azimuthal equal area, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon`, `projection.rotation.lat` | -| World scope, non-clipped projection (miller, robinson, mercator, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon` | - -In addition to the projection-specific set above, setting either -`lonaxis.range` or `lataxis.range` always disables auto-fit for that -figure, regardless of projection type. Even for projections where -fitbounds doesn't overwrite the ranges directly, the fitted -`center`/`scale` would visually override whatever framing the ranges -imply, so we treat setting a range as opt-out intent. - -Under the v4 default this means figures that supplied their own view -attributes in v3 continue to render with those attributes — no code change -needed. Auto-fit only kicks in when none of the relevant attributes are set. - -```js -Plotly.newPlot(gd, [/* ... */], { - geo: { - projection: { rotation: { lon: -75 } } - // fitbounds is implicitly false because rotation.lon is set - } -}); -``` - -This differs from v3, where `fitbounds: 'locations'` would overwrite any -user-supplied view attributes. In v4 the two are treated as opt-in to -different framing modes: auto-fit or explicit view. - -### Projections that don't participate in auto-fit - -Three projection types skip auto-fit and render with the schema default -view even when `fitbounds` is unset (i.e., defaulted to `'locations'`): - -- `'albers usa'` — a fixed composite projection with predetermined insets - for Alaska and Hawaii; it has no `center`/`rotation` concept for fitbounds - to target. -- `'craig'` and `'satellite'` — the internal scale heuristic that drives - `fitbounds` compares data bounds against world bounds in the projected - plane, which is unreliable for these projections' non-linear (and, - for satellite, perspective-dependent) mapping. Auto-fit would zoom - incorrectly, so v4 skips it. - -For these projections `layout.geo.fitbounds` is silently forced to `false` -in the resolved layout even if you leave it at the default. To fit -locations under one of these projections, supply the view attributes -yourself (`center`, `projection.rotation`, `projection.scale`, etc.). - -### Reset button behavior - -The modebar's Reset view button restores the auto-fit view when -`fitbounds` is active, not the schema default. Prior to v4 there was no -auto-fit default, so Reset simply restored the schema default; in v4 the -initial view captured for reset is the fitted view. +| Marker icons now respect `marker.color` | To keep icons in their original artwork color, set `marker.color: 'white'`. | +| Maki icons load from `@mapbox/maki@8.2.0` via jsDelivr | A handful of icon names dropped between Maki 2.1 and 8.2 will 404 — swap to the nearest Maki 8 equivalent. | +| Legend swatches always draw a circle | Regardless of `marker.symbol`. Selectors that styled the swatch path based on symbol name will now match a circle on map traces. | --- -## Geo `fitbounds` framing for antimeridian features - -*Implemented in [#7891](https://github.com/plotly/plotly.js/pull/7891).* - -`layout.geo.fitbounds: 'locations'` (and `'geojson'`) now correctly frames -choropleth and scattergeo location traces containing features that cross the -±180° antimeridian — Russia, Fiji, Antarctica, New Zealand, and the Aleutian -Islands portion of Alaska. In v3 these were mis-framed because the underlying -bounding-box computation (`@turf/bbox`) reported a bogus whole-globe span -(`[-180°, 180°]`) for any such feature, and the fit zoomed the map out to -match. In v4, `computeBbox` uses `d3-geo.geoBounds`' widest-gap longitude -algorithm on the feature's vertices and returns the compact crossing range -(with `east > 180°` when the range wraps). - -Because v4 also flips the `fitbounds` default from `false` to `'locations'` -(see [Geo subplots auto-frame by default](#geo-subplots-auto-frame-by-default)), -figures that never set `fitbounds` explicitly now participate in auto-fit -too — so this antimeridian fix reaches many more figures than it would -have as a standalone change. +## Shape legend `line.dash` -### Which figures shift - -A figure sees a visible change when **both** of the following hold: - -- `layout.geo.fitbounds` is active — either explicitly set to `'locations'` / - `'geojson'`, or left at the v4 default (see the opt-out list in the - auto-fit-default section above), and -- The figure contains a `choropleth` or `scattergeo` trace with `locations` - where at least one location resolves to a feature that crosses ±180°. - -Figures that opt out of auto-fit (`fitbounds: false`, an explicit view -attribute, or one of the projections listed as skipping auto-fit), or that -don't include an antimeridian-crossing feature, render identically to v3 -as far as this fix is concerned. - -### Example - -```js -Plotly.newPlot(gd, [{ - type: 'choropleth', - locations: ['RUS'], - z: [1], - colorscale: [[0, '#c33'], [1, '#c33']], - showscale: false -}], { - geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }, - width: 700, - height: 500 -}); -// v3: fits to a bogus [-180°, 180°] span — Russia is a small red strip at -// the top of the whole world. -// v4: fits tightly to Russia's actual longitudinal extent (~19° through -// ~190°, unwrapped across the antimeridian). -``` - -| Before (v3) | After (v4) | -|---|---| -| ![v3 Russia mis-framed with empty space](/all_static/images/migrating-to-v4/migration_antimeridian_v3.png) | ![v4 Russia tightly framed](/all_static/images/migrating-to-v4/migration_antimeridian_v4.png) | +Filled-shape legend markers (`type: 'rect'`, `'circle'`, or filled paths with +`showlegend: true`) now draw their outline using the shape's `line.dash` +value, matching the on-plot shape. No code change needed unless you had output +locked to the v3 solid-outline behavior. --- -## Geo subplot zoom limits - -*Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* - -Geo subplots accept two new attributes for clamping interactive zoom: - -| Attribute | Default | Effect | -|---|---|---| -| `layout.geo.projection.minscale` | `0` | Lower bound on zoom, expressed as a multiplier of `projection.scale`. `0` means no lower bound. | -| `layout.geo.projection.maxscale` | `null` | Upper bound on zoom, expressed as a multiplier of `projection.scale`. `null` means no upper bound. | - -```js -Plotly.newPlot(gd, [/* … */], { - geo: { - projection: { - scale: 1, - minscale: 0.5, // can't zoom out past 50% of base - maxscale: 4, // can't zoom in past 400% of base - }, - }, -}); -``` - -The defaults preserve v3 behavior — figures that don't set these -attributes are unaffected. - -One init-time wrinkle: if `projection.scale` falls outside -`[minscale, maxscale]`, Plotly now dispatches a synthetic zoom event on -first plot to clamp it back into range. That emits a -`plotly_relayout` event that v3 wouldn't have fired. If you have a -listener that distinguishes user-driven zooms from programmatic ones, -make sure it tolerates a single extra event at startup for figures -whose initial `projection.scale` is outside the configured bounds. - ---- - -## Shape legend marker outlines honor `line.dash` - -*Implemented in [#7845](https://github.com/plotly/plotly.js/pull/7845).* - -Shapes rendered in the legend as filled markers (e.g. `type: 'rect'`, -`'circle'`, or filled paths with `showlegend: true`) now draw the -marker's outline using the shape's `line.dash` value. In v3 the marker -outline was always solid regardless of the shape's dash style, so the -swatch didn't match the shape on the plot. (Line-only shapes — -`type: 'line'` — already drew their swatch dashed in v3; only the -filled-marker path was hardcoded to solid.) - -```js -Plotly.newPlot(gd, [], { - shapes: [{ - type: 'rect', - x0: 0, x1: 1, y0: 0, y1: 1, - line: { dash: 'dot' }, - fillcolor: 'rgba(200,0,0,0.2)', - showlegend: true, - }], -}); -// v3: legend marker outline is solid -// v4: legend marker outline is dotted, matching the on-plot shape -``` - -| Before (v3) | After (v4) | -|---|---| -| ![v3 shape legend outlines solid](/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v3.png) | ![v4 shape legend outlines dashed](/all_static/images/migrating-to-v4/migration_shape_legend_swatch_v4.png) | - ---- - -## Overlaying axis `tickmode` defaults to `'sync'` - -*Implemented in [#7684](https://github.com/plotly/plotly.js/pull/7684).* +## Overlaying axis `tickmode` An axis that overlays another axis (`layout.xaxis2.overlaying: 'x'`, -`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to -`'sync'` instead of `'auto'`. The overlay axis draws tick marks and -gridlines at the same positions as its base axis, computing labels to -match — rather than picking its own auto-fit tick positions. - -In v3 the two axes drew independent auto-tick grids, producing -staggered gridlines that were hard to read and left no visual -association between a gridline and a specific axis. Sync eliminates -that overlap. - -```js -Plotly.newPlot(gd, [ - { y: [1, 3, 2], name: 'A' }, - { y: [100, 300, 200], name: 'B', yaxis: 'y2' } -], { - yaxis2: { overlaying: 'y', side: 'right' } - // v3: y2 picks its own ticks, producing a staggered grid - // v4: y2 places ticks at y's tick positions, with y2-range labels -}); -``` - -| Before (v3) | After (v4) | -|---|---| -| ![v3 staggered overlay ticks](/all_static/images/migrating-to-v4/migration_tickmode_v3.png) | ![v4 sync'd overlay ticks](/all_static/images/migrating-to-v4/migration_tickmode_v4.png) | - -### Exception: categorical / multicategory base axes - -When the overlaid (base) axis is `type: 'category'` or `'multicategory'`, -`tickmode` continues to default to `'auto'` on the overlaying axis. -Sync'ing tick positions to category slots is almost never the intent. - -### Opting out - -Set `tickmode: 'auto'` (or any other explicit value) on the overlaying -axis to restore v3 behavior: +`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to `'sync'` +— the overlay draws its ticks at the base axis's positions with its own +range's labels. Set `tickmode: 'auto'` on the overlay to restore v3's +independent-grid behavior: ```js { yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } ``` -### Incidental bugfix - -`showexponent`, `showtickprefix`, and `showticksuffix` values of -`'first'` and `'last'` were previously ignored on axes rendered with -`tickmode: 'sync'`. Any workaround for that (e.g., forcing `'all'` on -overlay axes) is no longer needed in v4. +Categorical / multicategory base axes are exempt — overlays over them keep +defaulting to `'auto'`. --- -## Sankey layout algorithm update +## Sankey layout -*Implemented in [#7830](https://github.com/plotly/plotly.js/pull/7830).* +`@plotly/d3-sankey` was upgraded from 0.7.2 to 0.12.3. The schema is +unchanged, but node y-positions and link paths shift for the same figure. No +code change needed unless you had output locked to specific pixel positions. -`@plotly/d3-sankey` has been upgraded from 0.7.2 to 0.12.3. The schema -and API surface for `sankey` traces are unchanged — every attribute -that worked in v3 still works in v4 — but the underlying layout -algorithm was rewritten upstream across these versions, so node and -link positions for the same figure shift. - -The most visible effect is that links tend to be straighter and cross -each other less: the new relaxation step gives more weight to -minimizing link travel between columns, so flows that previously -swooped across the diagram now run closer to horizontal. Node -y-positions within a column shift to accommodate this, and exact node -heights / paddings can differ by a few pixels. - -| Before (v3) | After (v4) | -|---|---| -| ![v3 sankey with crossing links](/all_static/images/migrating-to-v4/migration_sankey_v3.png) | ![v4 sankey with rewritten layout](/all_static/images/migrating-to-v4/migration_sankey_v4.png) | +To pin node/link order (for animation or side-by-side comparisons), use the +new `sankey.node.sort` and `sankey.link.sort` attributes with `'input'`. +Defaults preserve v3-equivalent auto ordering. From 33b86d7c9f3a37fdff1280016fe10756a29f6050 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 22 Jul 2026 16:18:57 -0600 Subject: [PATCH 07/25] Add v4 'What's New' guide --- .../2026-07-20-whats-new-in-v4.md | 965 ++++++++++++++++++ 1 file changed, 965 insertions(+) create mode 100644 _posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md new file mode 100644 index 000000000..89cdbfcda --- /dev/null +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -0,0 +1,965 @@ +--- +description: Full details on new features and breaking changes in Plotly.js version 4. +display_as: guide +language: plotly_js +layout: base +name: What's New in Plotly.js v4 +order: 1 +page_type: u-guide +permalink: javascript/guides/whats-new-in-v4/ +sitemap: false +thumbnail: thumbnail/mixed.jpg +--- +# What's New in Plotly.js v4 + +This page is a comprehensive reference for the new features and breaking +changes in Plotly.js v4. For a quick checklist of code changes to update +existing charts, see [Migrating to Plotly.js +v4](/javascript/guides/migrating-to-v4/). + +## Contents + +- [Minimum Node.js version](#minimum-nodejs-version) +- [Color library swap (tinycolor2 → color)](#color-library-swap) +- [Chart Studio APIs removed](#chart-studio-apis-removed) +- [Mapbox traces and subplots removed](#mapbox-traces-and-subplots-removed) +- [Country name lookup (country-regex → country-iso-search)](#country-name-lookup) +- [TypeScript types](#typescript-types) +- [Scattermap icon defaults](#scattermap-icon-defaults) +- [Map subplots auto-fit to data](#map-subplots-auto-fit-to-data) +- [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default) +- [Geo `fitbounds` framing for antimeridian features](#geo-fitbounds-framing-for-antimeridian-features) +- [Geo subplot zoom limits](#geo-subplot-zoom-limits) +- [Shape legend marker outlines honor `line.dash`](#shape-legend-marker-outlines-honor-line-dash) +- [Overlaying axis `tickmode` defaults to `'sync'`](#overlaying-axis-tickmode-defaults-to-sync) +- [Sankey layout algorithm update](#sankey-layout-algorithm-update) +- [Sankey node and link ordering](#sankey-node-and-link-ordering) + +--- + +## Minimum Node.js version + +*Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* + +Plotly.js now requires Node.js v22 or newer. The previous floor was v18, which +has reached end-of-life. + +This only affects you if: + +| Scenario | Why | +|---|---| +| You build Plotly.js from source | Contributors and custom bundles | +| You run Plotly.js in a Node.js runtime | Server-side rendering via jsdom, validation scripts, image export pipelines, etc. | +| You install via `yarn` or `pnpm` | Both enforce `engines` strictly (`npm` prints a warning but installs) | + +Consumers who only load the pre-built browser bundle (`plotly.min.js` or a +partial bundle like `plotly-basic.min.js`) are unaffected — the bundle runs in +browsers, not Node. + +If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a warning on +install but won't fail; `yarn` and `pnpm` will refuse to install unless your +environment satisfies `engines.node >= 22.0.0`. + +--- + +## Color library swap + +*Implemented in [#7536](https://github.com/plotly/plotly.js/pull/7536).* + +In v4, Plotly's internal color processing was switched from +[tinycolor2](https://github.com/bgrins/TinyColor) to +[color](https://github.com/Qix-/color). The new library is actively maintained +and supports modern CSS Color 4 syntax, but a handful of behaviors changed in +the process. + +### Color string inputs that no longer work + +**`hsv()` color strings are no longer accepted.** + +```js +// Before +{ marker: { color: 'hsv(200, 80%, 80%)' } } + +// After — convert to hsl, hwb, hex, or rgb +{ marker: { color: 'hsl(200, 67%, 47%)' } } +``` + +A color in the unsupported format will fall back to the attribute's default. + +**`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer +accepted.** + +```js +// Before — tinycolor parsed this as 0–1 fractions +'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) + +// After — the underlying library reads them as integer 0–255 (truncated) +'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) +``` + +Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` +(or any other supported color string) before passing them to Plotly. + +Mixed-format strings where at least one component is `>= 1` (e.g. `rgb(255, +0.0, 0.0)`) continue to render correctly: the new parser treats the `0.0` +components as integer `0`. + +**Numeric color inputs are now rejected.** + +```js +// Before — silently accepted, rendered as near-black +{ marker: { color: 42 } } + +// After — falls back to the attribute default +``` + +If you were relying on numeric color values being coerced, convert them to +color strings before passing them to Plotly. + +### Color computation output changes + +A handful of Plotly's derived colors shift by a few RGB units. Visible places +where output shifts: + +| Where | Example | +|---|---| +| Heatmap auto-contrast text | Cells in the mid-luminance range flip between dark grey and white on colorscales like Viridis or Jet | +| Auto-generated `insidetextfont` color on bars/waterfall | Same threshold shift around mid-luminance backgrounds | +| Sankey default hover color (dark BG) | RGB channels shift by 1 unit per channel vs v3 | + +Example — the four cells with `z` values 55, 56, and 60 (both occurrences) +shift their text from white in v3 to dark grey in v4 on a Viridis heatmap, +because the underlying color library computes cell luminance with a slightly +different formula. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 Viridis heatmap with white text on mid-luminance cells](/all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png) | ![v4 Viridis heatmap with dark text on those cells](/all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png) | + +### New color formats you can now use + +The new library accepts CSS Color 4 syntax that wasn't possible with +tinycolor. All of these are now valid anywhere Plotly accepts a color string: + +```js +'#ff0000aa' // 8-digit hex with alpha +'#f00a' // 4-digit short hex with alpha +'rgb(255 0 0)' // space-separated rgb +'rgba(255 0 0 / 0.5)' // slash-alpha rgba +'hsl(0 100% 50% / 0.5)' // slash-alpha hsl +'hsla(0, 100%, 50%, 0.5)' // hsla +'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) +``` + +See +[test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) +for a working example using each format. + +#### Browser compatibility + +All of these are parsed by Plotly in JavaScript and normalized to legacy +`rgb(...)` / `rgba(...)` before being written to the DOM, so the browser never +sees the modern syntax — your figures render the same in any browser that ran +v3. The note below only matters if you also mirror these strings into your own +stylesheets or template literals. + +Native CSS support: + +| Format | First supported | +|---|---| +| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | +| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | +| `hsla()` | Universal since IE9 | +| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | + +`hwb()` is the only format here that won't parse in browsers from ~2020 or +earlier. Everything else is safe in any browser shipped in the last seven +years. + +--- + +## Chart Studio APIs removed + +*Implemented in [#7812](https://github.com/plotly/plotly.js/pull/7812).* + +The legacy "Edit in Chart Studio" link, related config options, and the +streaming token attribute have been removed. The `sendDataToCloud` modebar +button and config option are retained — only the duplicate `editInChartStudio` +button and the on-graph "Edit chart" link are gone. + +### Removed config options + +`Plotly.newPlot(gd, data, layout, config)` no longer accepts: + +| Removed | What it did | Replacement | +|---|---|---| +| `showLink` | Drew an "Edit chart" link at the bottom-right of the plot | None — remove the option | +| `linkText` | Text for the `showLink` link | None — remove the option | +| `sendData` | Whether the link uploaded data or just linked to a file | None — remove the option | +| `showSources` | Hook that drew custom source links next to `showLink` | None — remove the option | +| `showEditInChartStudio` | Pencil-icon variant of `sendDataToCloud` | Use `showSendToCloud` | + +```js +// Before +Plotly.newPlot(gd, data, layout, { + showLink: true, + linkText: 'View on Plotly', + showEditInChartStudio: true, +}); + +// After +Plotly.newPlot(gd, data, layout, { + showSendToCloud: true, +}); +``` + +### Removed modebar button + +`editInChartStudio` is no longer a built-in modebar button. If you were adding +it explicitly via `modeBarButtonsToAdd`, switch to `sendDataToCloud`: + +```js +// Before +{ modeBarButtonsToAdd: ['editInChartStudio'] } + +// After +{ modeBarButtonsToAdd: ['sendDataToCloud'] } +``` + +### Removed trace attribute + +The undocumented `stream` attribute (`stream.token`, `stream.maxpoints`) has +been removed from every trace type. It was a hook for the Chart Studio +streaming service, which is no longer reachable. If you have figures +containing `stream: { token: '...', maxpoints: N }` in their trace objects, +delete those properties — they're now schema-rejected. + +--- + +## Mapbox traces and subplots removed + +*Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* + +The legacy mapbox-gl-js–based traces and subplot type have been removed. The +MapLibre-based `map` family that has shadowed them since v2 is now the only +map implementation. For deeper background on the switch, see [Mapbox to +MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). + +### Removed + +| Removed | Replacement | +|---|---| +| `scattermapbox` trace | `scattermap` | +| `choroplethmapbox` trace | `choroplethmap` | +| `densitymapbox` trace | `densitymap` | +| `layout.mapbox` subplot (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | +| `layout.mapbox.accesstoken` | None — MapLibre uses open tile providers | +| `mapboxAccessToken` config option | None — see above | +| `plotly-mapbox.min.js` partial bundle | `plotly-map.min.js` | +| Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | +| `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | + +The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, +`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), so +the migration is usually a rename. + +```js +// Before +{ + data: [{ type: 'scattermapbox', lon: [...], lat: [...] }], + layout: { + mapbox: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, + }, + config: { mapboxAccessToken: 'pk.eyJ1...' }, +} + +// After +{ + data: [{ type: 'scattermap', lon: [...], lat: [...] }], + layout: { + map: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, + }, + // mapboxAccessToken removed — MapLibre needs no token for the + // built-in styles +} +``` + +### Built-in style values + +Every built-in `style` name that worked on `mapbox` still works on `map`, but +the tiles backing them differ — visual output **will change** even when no +other figure changes: + +| Style name | Old (`mapbox`) | New (`map`) | +|---|---|---| +| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | +| `light` | mapbox.com light | Carto Positron | +| `dark` | mapbox.com dark | Carto Dark Matter | +| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | +| `white-bg`, `open-street-map` | unchanged | unchanged | +| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | + +The three Stamen styles (`stamen-terrain`, `stamen-toner`, +`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API key. +Users who need them can supply a custom `style` URL. + +### Custom style URLs + +Custom MapLibre / Mapbox-style JSON URLs continue to work. The +`mapbox://styles/mapbox/...` short form is no longer resolved, since it +requires authenticating to mapbox.com. Substitute the full URL of an +equivalent open style, or self-host the style JSON. + +--- + +## Country name lookup + +*Implemented in [#7856](https://github.com/plotly/plotly.js/pull/7856).* + +`locationmode: 'country names'` on `choropleth` and `scattergeo` traces is now +resolved by [country-iso-search](https://github.com/plotly/country-iso-search) +instead of [country-regex](https://github.com/etpinard/country-regex). The +attribute name, accepted values list, and ISO-3 output are unchanged — the +difference is in *how* a name string is matched to an alpha-3 code. + +The old library walked a table of country-specific regular expressions and +returned the first match. That made it lenient (substring matches worked) but +ambiguity-prone — strings like `'Republic of'` could resolve to whichever +entry's regex hit first. The new library does a sanitized exact lookup against +a curated alias table, which is stricter about ambiguous input but accepts +many more legitimate forms. + +### Previously recognized names that no longer work + +Strings that only matched because of overly broad regex fragments now fall +back to the unrecognized-name log message and the location is skipped. In +practice this hits inputs that weren't really country names — partial phrases, +generic descriptors, or strings containing a country name as a substring of +something else (e.g. `'Republic of Foo'`, `'Not Iran'`). If you were relying +on a non-canonical form, switch to the country's name, an alias, or the ISO-3 +/ ISO-2 code. + +### Names and forms that now resolve + +The alias table is larger and the input is normalized before lookup, so a +number of forms that previously failed now work: + +```js +// All resolve to 'FRA' +'France' +'FR' // ISO 3166-1 alpha-2 +250 // UN M49 numeric (number or string) +'\u{1F1EB}\u{1F1F7}' // flag emoji + +// Historical / native / punctuated names +'Burma' // → 'MMR' +'Türkiye' // → 'TUR' (diacritics stripped) +'Cote d\'Ivoire' // → 'CIV' (apostrophes ignored) +'St. Kitts and Nevis' // → 'KNA' ('St.' expands to 'Saint') +'The Gambia' // → 'GMB' (leading 'The ' dropped) +``` + +Matching is case-insensitive. Sanitization also collapses internal whitespace, +drops `.` `()` `,`, maps `&` → `and`, and turns `-` / `–` / `—` into spaces — +so cosmetic punctuation differences in your input data no longer block a +match. + +### Disputed-territory codes are retained + +The user-assigned alpha-3 codes Plotly historically recognized for disputed +regions still work: + +| Code | Region | +|---|---| +| `XAC` | Aksai Chin | +| `XAP` | Arunachal Pradesh | +| `XBT` | Bir Tawil | +| `XHT` | Halaib Triangle | +| `XJK` | Jammu and Kashmir | + +These are layered on top of the standard ISO 3166-1 records via +[src/lib/custom_country_codes.ts](https://github.com/plotly/plotly.js/blob/master/src/lib/custom_country_codes.ts). +Whether a feature for them appears on the rendered map still depends on the +topojson resolution in use. + +--- + +## TypeScript types + +*Implemented in [#7680](https://github.com/plotly/plotly.js/pull/7680) and +[#7868](https://github.com/plotly/plotly.js/pull/7868).* + +Plotly.js now ships its own TypeScript type definitions. `package.json` points +`"types"` at `lib/index.d.ts`, so the types are picked up automatically — no +separate `@types/*` install is needed. + +### Importing + +The package exports a default namespace, named exports, and a global `Plotly` +namespace: + +```ts +import Plotly from 'plotly.js'; +// or +import * as Plotly from 'plotly.js'; +// or +import { newPlot } from 'plotly.js'; +import type { Layout, Data, TraceType } from 'plotly.js'; +``` + +A minimal typed example: + +```ts +import { newPlot } from 'plotly.js'; +import type { Data, Layout } from 'plotly.js'; + +const data: Data[] = [{ type: 'scatter', x: [1, 2, 3], y: [4, 5, 6] }]; +const layout: Partial = { title: { text: 'Demo' } }; + +await newPlot(div, data, layout); +``` + +### What's exported + +**Trace data** — `Data` (the union of every trace's typed data object), plus +per-trace interfaces like `ScatterData`, `BarData`, `HeatmapData`, +`ChoroplethData`, etc. Each per-trace interface narrows on `type`, so using +`Data[]` in your figure lets TypeScript pick the right trace shape from the +literal `type` value: + +```ts +const data: Data[] = [ + { type: 'bar', x: ['a', 'b'], y: [1, 2] }, // checked as BarData + { type: 'scatter', x: [1, 2], mode: 'lines' }, // checked as ScatterData +]; +``` + +Other exports: + +| Category | Exports | +|---|---| +| Layout | `Layout` (the full layout interface), `LayoutAxis`, `Legend`, `Annotation`, `Shape`, `Slider`, `UpdateMenu`, `Scene`, and the rest of the component interfaces. Pass `Partial` to `newPlot` / `react` since most fields are optional. | +| Config | `Config`, `ToImgopts`, `ToImageButtonOptions`, `DownloadImgopts`, `ModeBarDefaultButtons`, `ModeBarButton`, `Icon`. | +| Trace/layout enums | String-literal unions like `TraceType`, `AxisType`, `Calendar`, `Dash`, `PatternShape`, `XRef`, `YRef`, `MarkerSymbol`, `HoverInfo`, etc. Use these instead of bare `string` to get narrowing on attribute values. | +| Shared sub-interfaces | `Font`, `ColorBar`, `HoverLabel`, `Pattern`, `Domain`, `LegendGroupTitle`, `TickFormatStops`, etc. — used wherever the schema reuses the same sub-attribute tree. | +| Events | `PlotMouseEvent`, `PlotHoverEvent`, `PlotSelectionEvent`, `PlotRelayoutEvent`, `PlotRestyleEvent`, `LegendClickEvent`, `SliderChangeEvent`, etc., plus `PlotlyEventName` for the union of event names accepted by `on()` / `once()` / `removeListener()`. | +| Animation & frames | `AnimationOpts`, `Frame`, `Transition`, `TransitionEasing`. | +| Templates | `Template` interface (and `TemplateFigure`, `ValidateTemplateResult` from the template utilities). | +| DOM | `PlotlyHTMLElement` (the typed `Plotly.newPlot` graph div), `Datum`, `TypedArray`, `Color`, `ColorScale`. | + +### Notes on a few types + +**`Data` vs per-trace interfaces.** Prefer the `Data` union for figure +literals (TypeScript discriminates on `type`); use the per-trace interface +only when you have a value that is *guaranteed* to be one trace type — e.g. a +helper that builds a `BarData` to push into a `Data[]`. + +**`Layout` is the input shape, not the resolved shape.** It mirrors what you +pass to `newPlot`. The post-coerce internal shape used inside Plotly's own +code (often called "FullLayout") is intentionally not exported. Likewise +`Data` is the input shape; resolved trace state ("FullData") is internal. + +**`PlotType` is an alias for `TraceType`.** Both name the same string-literal +union of trace type names; existing code that imports `PlotType` keeps +compiling. New code should prefer `TraceType`. + +--- + +## Scattermap icon defaults + +*Implemented in [#7825](https://github.com/plotly/plotly.js/pull/7825).* + +If you used `scattermap` or `scattermapbox` in v3, three rendering details +have changed by the time you land on `scattermap` in v4: + +### Marker icons now respect `marker.color` + +`marker.color` on a scattermap trace is now applied to the icon by setting +`icon-color`. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap icons uncolored](/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v3.png) | ![v4 scattermap icons tinted red](/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v4.png) | + +### Maki icon set updated to v8 (via jsDelivr) + +The icon CDN and version have changed: + +| Version | URL | +|---|---| +| v3 | `https://unpkg.com/maki@2.1.0/icons/.svg` | +| v4 | `https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/.svg` | + +A handful of icon names removed between Maki 2.1 and 8.2 will now silently +fail to load (HTTP 404). If you were using one of the dropped icons, swap it +for the nearest Maki 8 equivalent (see [Maki 8 icon +list](https://labs.mapbox.com/maki-icons/)). + +### Legend swatch always renders as a circle + +`scattermap` legend swatches now always draw a circle, regardless of +`marker.symbol`. In v3 the swatch went through the same code path as cartesian +traces, which only understands the [Plotly-supported symbol +names](https://github.com/plotly/plotly.js/blob/master/src/components/drawing/symbol_defs.js). +On map traces, that produced inconsistent output: symbols with names that +don't overlap the Plotly set (Maki-only names like `'airport'`, `'cafe'`) +rendered as filled circles, while other symbols (`'square'`, `'star'`, etc.) +rendered as broken/empty paths in the legend even though they draw correctly +on the map. The v4 circle fallback makes the swatch consistent across every +scattermap trace. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap legend inconsistent](/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v3.png) | ![v4 scattermap legend all circles](/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v4.png) | + +If you were styling the legend swatch path directly based on `marker.symbol`, +that selector will now always match a circle path on map traces. + +--- + +## Map subplots auto-fit to data + +*Implemented in [#7884](https://github.com/plotly/plotly.js/pull/7884).* + +`map` subplots now auto-fit the view to fit the trace data. In v3, the same +layout produced a world view centered at `(0, 0)` with `zoom: 1`, requiring +the user to supply `center` and `zoom` (or drag/scroll) to see their data. + +```js +Plotly.newPlot(gd, [{ + type: 'scattermap', + lon: [-122.4, -73.9, -87.6], + lat: [37.8, 40.7, 41.9] +}], { + map: { style: 'basic' } +}); +// v3: map opens centered at (0, 0) at zoom 1 +// v4: map opens framed on the three cities +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 map with world view](/all_static/images/whats-new-in-v4/migration_map_autofit_v3.png) | ![v4 map framed on cities](/all_static/images/whats-new-in-v4/migration_map_autofit_v4.png) | + +Auto-fitting runs on the initial render and again on data-only updates +(`Plotly.restyle` of `lon`/`lat`, `Plotly.addTraces`, `Plotly.deleteTraces`) +whenever the user hasn't overridden the view. Once the user pans, zooms, +rotates, or tilts the map — or explicitly sets `center` / `zoom` / `bearing` / +`pitch` in the layout — auto-fitting steps aside and preserves the chosen view +across further data changes. + +### Disabling auto-fitting + +There are two ways to disable auto-fitting: + +**Set `map.fitbounds: false`** — disables automatic auto-fitting and instead +defaults to showing a map with center `(0, 0)` and zoom `1`, as in v3. + +```js +{ map: { fitbounds: false } } +``` + +**Set `map.center` or `map.zoom` explicitly** — passing any value for +`map.zoom` or `map.center` (including the defaults of `zoom: 1` or `center: { +lon: 0, lat: 0 }`) is taken as a signal to follow the user provided values +rather than choosing zoom and center via auto-fitting. + +```js +// Keep the v3 world view: +{ map: { center: { lon: 0, lat: 0 }, zoom: 1 } } +``` + +### Which traces contribute + +`scattermap` and `densitymap` traces are affected by this change. +**`choroplethmap` traces skip auto-fitting** because their data contains +geographic regions, whose bounding boxes must be computed differently. When a +subplot contains a `choroplethmap` trace, auto-fitting is disabled and the +defaults (`zoom: 1` and `center: { lon: 0, lat: 0 }`) are used. + +### Data that crosses the antimeridian + +For data that straddles the antimeridian (points on both sides of ±180°, in +the middle of the Pacific Ocean), the auto-fit picks the compact crossing +range rather than the long-way-around view. For example, `lon: [131.8855, +-179]` frames as `[131.8855, 181]` (a ~49° span across the antimeridian) +instead of the naive `[-179, 131.8855]` (~311° the wrong way). + +### `map.bounds` is unaffected + +The `map.bounds` layout attribute (which restricts panning) is a separate +concern and continues to work as in v3. Auto-fitting computes the *initial* +view; `bounds` constrains *interactive* view movement. Both can coexist. + +### Relationship to `layout.geo.fitbounds` + +Both `map` and `geo` subplots now expose a `fitbounds` layout attribute, but +the shapes differ: + +| | `map.fitbounds` | `geo.fitbounds` | +|---|---|---| +| Type | enumerated | enumerated | +| Values | `false` / `'locations'` | `false` / `'locations'` / `'geojson'` | +| Default | `'locations'` | `'locations'` (was `false` in v3 — see [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default)) | +| Re-fits on data updates | yes, until user overrides view | yes, every render | + +Both accept `false` (disable auto-fit) and `'locations'` (fit to trace lon/lat +data); `geo.fitbounds` additionally accepts `'geojson'` to frame the entire +geojson feature set rather than just visible locations. + +--- + +## Geo subplots auto-fit by default + +*Implemented in [#7895](https://github.com/plotly/plotly.js/pull/7895).* + +`layout.geo.fitbounds` now defaults to `'locations'` (v3 default: `false`). +`geo` subplots — used by `scattergeo`, `choropleth`, and any other +location-based geo trace — now auto-fit their initial view to fit the trace +data, matching the behavior of `map` subplots. Figures that previously +rendered the full world map (or the scope's default extent) now zoom to just +the locations they plot. + +```js +Plotly.newPlot(gd, [{ + type: 'choropleth', + locations: ['CAN', 'MEX'], + z: [1, 2] +}], { + // v3: full world map (fitbounds defaulted to false) + // v4: tight fit around Canada and Mexico (fitbounds now defaults to 'locations') +}); +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 geo world view](/all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png) | ![v4 geo framed on Canada+Mexico](/all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png) | + +### Disabling auto-fitting + +There are two ways to disable auto-fitting: + +**Set `layout.geo.fitbounds: false`** — disables automatic auto-fitting and +instead defaults to showing a map with center `(0, 0)` and scale `1`, as in +v3. + +```js +Plotly.newPlot(gd, [/* ... */], { + geo: { fitbounds: false } // world view / scope-default view, as in v3 +}); +``` + +**Implicit:** setting `layout.center` or specific attributes under +`layout.projection` will disable auto-fit for that figure. Which attributes +count depends on the projection: + +| Projection kind | Projection-specific opt-out attributes | +|---|---| +| Any non-`world` scope (checked first, even if the projection is also clipped) | `center.lon`, `center.lat`, `projection.scale` | +| World scope + clipped projection (orthographic, azimuthal equal area, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon`, `projection.rotation.lat` | +| World scope, non-clipped projection (miller, robinson, mercator, etc.) | `center.lon`, `center.lat`, `projection.scale`, `projection.rotation.lon` | + +In addition to the projection-specific set above, setting either +`lonaxis.range` or `lataxis.range` always disables auto-fit for that figure, +regardless of projection type. Even for projections where fitbounds doesn't +overwrite the ranges directly, the fitted `center`/`scale` would visually +override whatever framing the ranges imply, so we treat setting a range as +opt-out intent. + +Under the v4 default this means figures that supplied their own view +attributes in v3 continue to render with those attributes — no code change +needed. Auto-fit only kicks in when none of the relevant attributes are set. + +```js +Plotly.newPlot(gd, [/* ... */], { + geo: { + projection: { rotation: { lon: -75 } } + // fitbounds is implicitly false because rotation.lon is set + } +}); +``` + +This differs from v3, where `fitbounds: 'locations'` would overwrite any +user-supplied view attributes. In v4 the two are treated as opt-in to +different framing modes: auto-fit or explicit view. + +### Projections that don't participate in auto-fit + +Three projection types skip auto-fit and render with the schema default view +even when `fitbounds` is unset (i.e., defaulted to `'locations'`): + +| Projection | Why it skips auto-fit | +|---|---| +| `'albers usa'` | A fixed composite projection with predetermined insets for Alaska and Hawaii; it has no `center` / `rotation` concept for fitbounds to target. | +| `'craig'` and `'satellite'` | The internal scale heuristic that drives `fitbounds` compares data bounds against world bounds in the projected plane, which is unreliable for these projections' non-linear (and, for satellite, perspective-dependent) mapping. Auto-fit would zoom incorrectly, so v4 skips it. | + +For these projections `layout.geo.fitbounds` is silently forced to `false` in +the resolved layout even if you leave it at the default. To fit locations +under one of these projections, supply the view attributes yourself (`center`, +`projection.rotation`, `projection.scale`, etc.). + +### Reset button behavior + +The modebar's Reset view button restores the auto-fit view when `fitbounds` is +active, not the schema default. Prior to v4 there was no auto-fit default, so +Reset simply restored the schema default; in v4 the initial view captured for +reset is the fitted view. + +--- + +## Geo `fitbounds` framing for antimeridian features + +*Implemented in [#7891](https://github.com/plotly/plotly.js/pull/7891).* + +`layout.geo.fitbounds: 'locations'` (and `'geojson'`) now correctly frames +choropleth and scattergeo location traces containing features that cross the +±180° antimeridian — Russia, Fiji, Antarctica, New Zealand, and the Aleutian +Islands portion of Alaska. In v3 these were mis-framed because the underlying +bounding-box computation (`@turf/bbox`) reported a bogus whole-globe span +(`[-180°, 180°]`) for any such feature, and the fit zoomed the map out to +match. In v4, `computeBbox` uses `d3-geo.geoBounds`' widest-gap longitude +algorithm on the feature's vertices and returns the compact crossing range +(with `east > 180°` when the range wraps). + +Because v4 also flips the `fitbounds` default from `false` to `'locations'` +(see [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default)), +figures that never set `fitbounds` explicitly now participate in auto-fit too +— so this antimeridian fix reaches many more figures than it would have as a +standalone change. + +### Which figures shift + +A figure sees a visible change when **both** of the following hold: + +| Condition | Detail | +|---|---| +| `layout.geo.fitbounds` is active | Either explicitly set to `'locations'` / `'geojson'`, or left at the v4 default (see the opt-out list in the auto-fit-default section above). | +| The figure contains an antimeridian-crossing feature | A `choropleth` or `scattergeo` trace with `locations` where at least one location resolves to a feature that crosses ±180°. | + +Figures that opt out of auto-fit (`fitbounds: false`, an explicit view +attribute, or one of the projections listed as skipping auto-fit), or that +don't include an antimeridian-crossing feature, render identically to v3 as +far as this fix is concerned. + +### Example + +```js +Plotly.newPlot(gd, [{ + type: 'choropleth', + locations: ['RUS'], + z: [1], + colorscale: [[0, '#c33'], [1, '#c33']], + showscale: false +}], { + geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }, + width: 700, + height: 500 +}); +// v3: fits to a bogus [-180°, 180°] span — Russia is a small red strip at +// the top of the whole world. +// v4: fits tightly to Russia's actual longitudinal extent (~19° through +// ~190°, unwrapped across the antimeridian). +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 Russia mis-framed with empty space](/all_static/images/whats-new-in-v4/migration_antimeridian_v3.png) | ![v4 Russia tightly framed](/all_static/images/whats-new-in-v4/migration_antimeridian_v4.png) | + +--- + +## Geo subplot zoom limits + +*Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* + +Geo subplots accept two new attributes for clamping interactive zoom: + +| Attribute | Default | Effect | +|---|---|---| +| `layout.geo.projection.minscale` | `0` | Lower bound on zoom, expressed as a multiplier of `projection.scale`. `0` means no lower bound. | +| `layout.geo.projection.maxscale` | `null` | Upper bound on zoom, expressed as a multiplier of `projection.scale`. `null` means no upper bound. | + +```js +Plotly.newPlot(gd, [/* … */], { + geo: { + projection: { + scale: 1, + minscale: 0.5, // can't zoom out past 50% of base + maxscale: 4, // can't zoom in past 400% of base + }, + }, +}); +``` + +The defaults preserve v3 behavior — figures that don't set these attributes +are unaffected. + +One init-time wrinkle: if `projection.scale` falls outside `[minscale, +maxscale]`, Plotly now dispatches a synthetic zoom event on first plot to +clamp it back into range. That emits a `plotly_relayout` event that v3 +wouldn't have fired. If you have a listener that distinguishes user-driven +zooms from programmatic ones, make sure it tolerates a single extra event at +startup for figures whose initial `projection.scale` is outside the configured +bounds. + +--- + +## Shape legend marker outlines honor `line.dash` + +*Implemented in [#7845](https://github.com/plotly/plotly.js/pull/7845).* + +Shapes rendered in the legend as filled markers (e.g. `type: 'rect'`, +`'circle'`, or filled paths with `showlegend: true`) now draw the marker's +outline using the shape's `line.dash` value. In v3 the marker outline was +always solid regardless of the shape's dash style, so the swatch didn't match +the shape on the plot. (Line-only shapes — `type: 'line'` — already drew their +swatch dashed in v3; only the filled-marker path was hardcoded to solid.) + +```js +Plotly.newPlot(gd, [], { + shapes: [{ + type: 'rect', + x0: 0, x1: 1, y0: 0, y1: 1, + line: { dash: 'dot' }, + fillcolor: 'rgba(200,0,0,0.2)', + showlegend: true, + }], +}); +// v3: legend marker outline is solid +// v4: legend marker outline is dotted, matching the on-plot shape +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 shape legend outlines solid](/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v3.png) | ![v4 shape legend outlines dashed](/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v4.png) | + +--- + +## Overlaying axis `tickmode` defaults to `'sync'` + +*Implemented in [#7684](https://github.com/plotly/plotly.js/pull/7684).* + +An axis that overlays another axis (`layout.xaxis2.overlaying: 'x'`, +`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to `'sync'` +instead of `'auto'`. The overlay axis draws tick marks and gridlines at the +same positions as its base axis, computing labels to match — rather than +picking its own auto-fit tick positions. + +In v3 the two axes drew independent auto-tick grids, producing staggered +gridlines that were hard to read and left no visual association between a +gridline and a specific axis. Sync eliminates that overlap. + +```js +Plotly.newPlot(gd, [ + { y: [1, 3, 2], name: 'A' }, + { y: [100, 300, 200], name: 'B', yaxis: 'y2' } +], { + yaxis2: { overlaying: 'y', side: 'right' } + // v3: y2 picks its own ticks, producing a staggered grid + // v4: y2 places ticks at y's tick positions, with y2-range labels +}); +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 staggered overlay ticks](/all_static/images/whats-new-in-v4/migration_tickmode_v3.png) | ![v4 sync'd overlay ticks](/all_static/images/whats-new-in-v4/migration_tickmode_v4.png) | + +### Exception: categorical / multicategory base axes + +When the overlaid (base) axis is `type: 'category'` or `'multicategory'`, +`tickmode` continues to default to `'auto'` on the overlaying axis. Sync'ing +tick positions to category slots is almost never the intent. + +### Opting out + +Set `tickmode: 'auto'` (or any other explicit value) on the overlaying axis to +restore v3 behavior: + +```js +{ yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } +``` + +### Incidental bug fix + +`showexponent`, `showtickprefix`, and `showticksuffix` values of `'first'` and +`'last'` were previously ignored on axes rendered with `tickmode: 'sync'`. Any +workaround for that (e.g., forcing `'all'` on overlay axes) is no longer +needed in v4. + +--- + +## Sankey layout algorithm update + +*Implemented in [#7830](https://github.com/plotly/plotly.js/pull/7830).* + +`@plotly/d3-sankey` has been upgraded from 0.7.2 to 0.12.3. The schema and API +surface for `sankey` traces are unchanged — every attribute that worked in v3 +still works in v4 — but the underlying layout algorithm was rewritten upstream +across these versions, so node and link positions for the same figure shift. + +The most visible effect is that links tend to be straighter and cross each +other less: the new relaxation step gives more weight to minimizing link +travel between columns, so flows that previously swooped across the diagram +now run closer to horizontal. Node y-positions within a column shift to +accommodate this, and exact node heights / paddings can differ by a few +pixels. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 sankey with crossing links](/all_static/images/whats-new-in-v4/migration_sankey_v3.png) | ![v4 sankey with rewritten layout](/all_static/images/whats-new-in-v4/migration_sankey_v4.png) | + +--- + +## Sankey node and link ordering + +*Implemented in [#7873](https://github.com/plotly/plotly.js/pull/7873).* + +Two new attributes let you override the automatic ordering that v4's d3-sankey +algorithm applies: + +| Attribute | Default | `'input'` value | +|---|---|---| +| `sankey.node.sort` | `'auto'` | Preserves the vertical order of nodes as given in `node.label`, disabling the layout's default y-axis reordering. | +| `sankey.link.sort` | `'auto'` | Preserves the order in which links are given in `link.source` / `link.target`, disabling the layout's per-node link ordering. | + +Defaults reproduce v3 behavior, so no code change is needed on upgrade. Use +`'input'` when you want a stable, deterministic ordering across renders — +animation, side-by-side comparisons, or figures where the input order carries +semantic meaning that the layout would otherwise obscure. + +```js +Plotly.newPlot(gd, [{ + type: 'sankey', + node: { + label: [/* … */], + sort: 'input' + }, + link: { + source: [/* … */], + target: [/* … */], + value: [/* … */], + sort: 'input' + } +}]); +``` + +The `sort` attribute is not honored on circular Sankey diagrams — those +continue to use `d3-sankey-circular`, which has no equivalent hook. + +Same data, same code — only the `sort` value differs: + +| `sort: 'auto'` (default) | `sort: 'input'` | +|---|---| +| ![auto reorders sources to reduce crossings](/all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png) | ![input preserves the given order, crossings and all](/all_static/images/whats-new-in-v4/migration_sankey_sort_input.png) | + +In this figure the source nodes are given as `[A, B, C, D]` and paired +one-to-one with targets `[Z, Y, X, W]` — a maximally-crossed input. `'auto'` +flips the source column to `D, C, B, A` so the primary flows run horizontally; +`'input'` leaves both columns in the given order and preserves every crossing. From 134e90f9c13dff808a3fee2f8f81d7550ade9bad Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 22 Jul 2026 16:19:12 -0600 Subject: [PATCH 08/25] Move images --- .../migration_antimeridian_v3.png | Bin .../migration_antimeridian_v4.png | Bin .../migration_color_heatmap_v3.png | Bin 0 -> 30542 bytes .../migration_color_heatmap_v4.png | Bin 0 -> 30434 bytes .../migration_geo_autofit_v3.png | Bin .../migration_geo_autofit_v4.png | Bin .../migration_map_autofit_v3.png | Bin .../migration_map_autofit_v4.png | Bin .../migration_sankey_sort_auto.png | Bin 0 -> 34609 bytes .../migration_sankey_sort_input.png | Bin 0 -> 36483 bytes .../migration_sankey_v3.png | Bin .../migration_sankey_v4.png | Bin .../migration_scattermap_iconcolor_v3.png | Bin .../migration_scattermap_iconcolor_v4.png | Bin .../migration_scattermap_legendsymbol_v3.png | Bin .../migration_scattermap_legendsymbol_v4.png | Bin .../migration_shape_legend_swatch_v3.png | Bin .../migration_shape_legend_swatch_v4.png | Bin .../migration_tickmode_v3.png | Bin .../migration_tickmode_v4.png | Bin 20 files changed, 0 insertions(+), 0 deletions(-) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_antimeridian_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_antimeridian_v4.png (100%) create mode 100644 all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png create mode 100644 all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_geo_autofit_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_geo_autofit_v4.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_map_autofit_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_map_autofit_v4.png (100%) create mode 100644 all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png create mode 100644 all_static/images/whats-new-in-v4/migration_sankey_sort_input.png rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_sankey_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_sankey_v4.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_scattermap_iconcolor_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_scattermap_iconcolor_v4.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_scattermap_legendsymbol_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_scattermap_legendsymbol_v4.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_shape_legend_swatch_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_shape_legend_swatch_v4.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_tickmode_v3.png (100%) rename all_static/images/{migrating-to-v4 => whats-new-in-v4}/migration_tickmode_v4.png (100%) diff --git a/all_static/images/migrating-to-v4/migration_antimeridian_v3.png b/all_static/images/whats-new-in-v4/migration_antimeridian_v3.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_antimeridian_v3.png rename to all_static/images/whats-new-in-v4/migration_antimeridian_v3.png diff --git a/all_static/images/migrating-to-v4/migration_antimeridian_v4.png b/all_static/images/whats-new-in-v4/migration_antimeridian_v4.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_antimeridian_v4.png rename to all_static/images/whats-new-in-v4/migration_antimeridian_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png b/all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png new file mode 100644 index 0000000000000000000000000000000000000000..dde01a9d0d5369c66906ad0d63f48197514f302b GIT binary patch literal 30542 zcmZ6SbwHF`)4&1glu|mR8AQ|IMkRu&9j5b^MzpFTZLKs9Lk%$h9k1hT!kRGC$i2V6|C^~{9A>6YYSQWww zaai#fhTg?Wu}|LnH~a21)?MG9 zo?|E+UYULXH^akt0dPE2Z2?mjZurD<|8@^JMJbc4p#Y>$&T!^reh*52&<2O@L7p6m zrrHLEo&55zMp?`71P4#jg=-c5X<5b#dzJ);@T@JMR&2UnJsCEjlV8uYu`x`ai zmzkpeB6EoE-oE|hdwr%|56;oOTlC&H*_*H5K4~UPWY!6CU-bN8IN`X`fl!T+r*lr_~qSn+aF~dY-sTwGQOn5yb9Bx0A2TS@_Y3xR3$;CH?NxcpW}6 zc=TJ(ad2>WoXuD|7al2_dp7&Y6HirHt9f{M7|+$%&9J^2NWwKJP;PLs#$(mjrX5qo zjCzZT|2zd`4$hD9jZw^#0KP8o?q>KRY^Vahr3Ac4>lWumq*JKQ;QB&J%8lG}9h=K` z`td@ed(ZKZC>DwrE-voZhDyX>SiM^N>TRA4>9wkLM<@iJK>GNo^Lt&y#f8Vu+3J42 zw6$Y$|C_+|^>vaRAq5k|(xuTFegT2i4|E^f&UWW0d$c#8e)qTTz1Q#HOI3NydLIiN z4{(A!hsNujEyGFpk3OD)v<{ArI@bH*Q~<*cNT%n(AlS;ZEy5WR&vMsHjXShlN|C;m zd-;<4b(4={-!2-b<#(?BAwFC@Ja|h>OFn-7f*J5ug>)2|cA0UYK<1dl^XG6DLmwlO z483F*?k*13DoMY_1$eauz;3?>?=Lo&172hT_%@uYuSwnGdbjp)r?ho-&Y|^fu~E>KmXWWiQ{N3%jk6@oMcCKpKF-Grahx;+-s4kD&cFcZX{|6Y1$BUxLE# zobjnDp)Ji76cXyV%`j*#zURepoyfHR>H`b0I?nJ^+5ZoU%9&<9G zWkeX}bhs*sPRxV;>UQ3FsGui$JOLH_x=l?<_-*y;DM&E`i*A*SFsAv^((BvYw;%=W zRRyZV`d1D{(YpIZ6B&=s#TY2!UN0;e?gVQAcI3+$F9wjRR_RTtAeu7xDFIuXA zqs>*gWgoLpIUTLgk)LQ3X}uDX;Fq{#RpHHt|tgV6(n#g7p znacgT@KouekY}FMY@AQ@?a7$Z_U(HxTQ*v_jlKP zJ{RmDM09r@E_pXaOmJ!T{1N3OI4bAF;4BJ$v({nhdqv3rp^^VB_ZQzN(YrdYo%bh7 z`r)V47x7q&8-r;@P+(CS*OcN$8(H^lfseNR679lL<^}yuHdP25GOb5GBedKc$-7Qe z7|vvZMe9>P3H5UD0cYdsMFNFUBsYzoFn?oGj;(}LB+YQ*no14LZk+r9n8EO@ys=S` znj&#m4iu>m;R%<8(8wATP{~U1gwIJ_u4&`A{jf_QUk zE4(F>&Uc@zMm}$!?brAfWb%KA%eg!9ir$61mbszHk1^LOHO%m=&b^$ie%-mWB-(F> z0S<3$Xegv=%Z1D+^zQfrNB#C!OfU%q#f)cy!r~R3_&rl;6C6jvuHVUs^o#~Cv`-}d zHYGOp^G7rJES*|=gSz^9ajE>5_?$1-H=Ht@CPw}ETcEd!hOduO>ue4XrJ5n zI4kxPI$e5KFO8nFtzE6_Fn8Vd#!zj$3#@Y&k8O?nVv~?CYb4W0zXpDDog-qIVtHpE z2~4IyG*}RT*v{MfLQ2b*D~CkXq|s>(;sc6|TK%HM#ZdF z8|ciJKYskkL;MWhkvd%MqRf7a&AJm=IFU;+7M0K6gr$F$8a5Y3NGBa_2j2J>~FAV1<4Ty6nmbBJQAc_#ag!TVeBilyp(u zUO1cmvXSX^gvS-$i2;U@7$|Vi>6qIjgXYtnDG9}4sIS!gw->Xs4X!&s3)7C)Zz%)> zh(KW0eSENfFG_H_V=|+8>SJF1f}yW#0&CmQZ@PwhMCxTg5AxoSAQ%0h%GSFpv{<&|?(rfmHrI7E5o+q;1T1?(gxKX_?L6ITn`oF3 zKL1)v6c5hCzL25;;zv65c#PQ;N0f}0-PGhw70u}_#dwb&XK4-*Bo`98dq%ez=E)Q1 zBr<|tQ4ir9Kq@&1k7?L>H_ZJKd3`S_`kU-ff@lbaw2eeu%)iO9R$C0TPF00-LBL1t z{-q6x@nNTfX}pxXefma6d-$8ZGEqNqFNeQ3H4Vr+vJT;F0^{{Lsb))I^u90QQ2I!- z94i8;;^;#zg6{x9><9X{bb?aTAra;k8R3cGozQSIxh!j;OVH%tSIa}InTnh(O$wdT zbeGVOL+Y1#V+C|xqlo+;Vq?Tmn!fDa($0KjHZ5pPr{Lq`>wT6>eRodOjO#ojjdKDC z0_*p`mV~oN8Di+OQ+XAuM#>Nu1aI zpX~d2QHJbEu+i6IBPmwSDeq*@dLNd4`8Jv%!no2>w)I5pt;!p&4BMsTaMYU8efY^D#=3ualNMDh zIoq@r_W(!s!=4L=1O$^*62_%(%Cv@`UMK|4KL&CZ;!yn%Sur?4LLGL$c8L}{mTasU z1nbaE{W``YvGU#S`>d`_tFKm9|Q(Xr348PYFf^>z()}NFxQ1+M_FE%klo;-`yW{ zVht9`4KouyxV#$=8`~s(;7})svVa0MNyt)R)E-65ocJihy&j`ISt^|1lV$>z^;Vcb z++Z*~{pgb|rHxlQt<0JHqP0KF=U#cR$R__pJ5D#nIg0tUMe*$@VY>iwS)3JcTY@eK)UE`7v zzh-4)1!YeX%}y+nGVm1sc0P}}=cE4D*cyx4Vv;0xrnoDt?ZUAwirQYYb1zQB@I?57 z(Rb;Q6W-PLev7SUdfn7>@hWcohMaVSS?rT*mDMQI7TyF0vm1Vu+nW8&c1K-=D9Gy- zp9YqS+UXS2m5bt;v=n_4k?QHxSX&_{oz(R#Vp8Gjeqw}_ko0hJWKaWhdjq`bkrZ=a zN)_dCje)-YxHl!|57B|9`7_G)uk%QBN!{je)b?uo_u$1?Pa!mm;d7jR{F0L~97}vG z=gWOLFA2*N`v;C-ksoh-|BnUaj%`KP`^U2N_x6Sf5yv^*6a0Yk3nI<5gp)y#BgXrZ zzeH5n^~K>*5VmvD*5B(L<>;3n_u6rQGWq*H#K5PgNXtPx4QAvYFIy(65;bkemqiuPqW&xh>NfilZ)O!A=G3Fid^;-x+#2Y!<* zRJlhBFu?KFJT}9Umef-{AI4Vtbzm+*h<|Urnax>8@wh@^E23_Gi$l@-zAC=Y zY5;i9oLE|lhvv*Dn|)D)Q$&HR>m8*8OPDradnS7OL(dRqa((LhdnboKNl>;MZJhSf zH-!83=GdaRQD4Lv#Yf|!p;&;Xl00X~kHl$jlPI)iS!#KEd4D_%I4-v>n^Me?F!@!Y*%0NLuVr6Ri8pBXhU_=Pkrl8>jkcyUo3AU)vPF)% zU*bgS8z!<<5YEwwC*2I;t$QThvb9>6F!x_D-zK(c_^pUZ;YK74L2F2WXWAlM@Vs2C ze18Q?y*l$wbmm$tn@*pSMqks7+=mmD5{urZFO6S~ARyX;q`7~*U4q!V@6vxAYzsVd zx^!PZYmL~7I*KGSjo>qf!%zGA$VFL@&q%~UFCT?+s1m-A22*qXBL zmR8oMjMuAacjHXeq)wnbMEnJil9z7FR6Iu!qt0iK zAK+xL3-m8-N&XN8@F5$vO; zS3?6^&lmdXr!xxbm)#0mMcF;~1SrixwCQt^3+iNcRw~aU8X4=nd2jmK02wiAI&Bch zzSwfB5+1%nk&q^FO}S6V6$4g{eW&7r0rbxPbIYDE7qM zoFv27S13WBU>`zS zC~rNR`ZlXUgZeFthN)=yDM+;6Dir>(BK*W4h;6I#L>!LJ)VKZxBUJ_HIkhWIbi7ef zbd2Gpov~?iBmbt0z^Q)_1yyB56a2;+ro~;8)a_?t(2}25{sr!C8F$ zHS5~gkN7{Dd78$Wsz!=$g`H@?X_@M5SYBqlMo~5Q?H@0LfRFSyiHW74(uOz-M0VL@bg%VoRt;(c?S zJh_>Fue+#OngU)g3oK$&Jx$-K^0GKW9m#*d*OL*zFG`;E;QtUZGrqAf>Usjqqs69J zsMo*v`hgl3KL-f7#!p0^4lwL>Ny>t-;~7iGqS`;udyl0p;CxZ4So~i+EdpEf9^k>+ zK$kA{;=k~=aTxH-ZRb>~vuN=fZU?}*u>lBm4+|FV0j-xI!JfqcAC`c^XHDlb?*FMq zZ;S+V=KN`<2vFDmV7-+RFvr;$gZB$yYJd;d2|XV5t##G{7+R*4Ys{pJ7Q{@cXf`fXH^gL`nO#InSrS)quGQ1QO9@(&Q=tG zK3b)1HK6uu3sUkZh5#NJOfEWN!jc3MZJc=HJMtigg)G;!p|*JY;h!@F#&Wz?;|>Bq z!)=UI*j$(3R8xxppao=|5cpRw!T1K3ol{%dn4Gpn8k{ZnZ-WBP1H4w2G$Z}XYrV1o z=D?joH-PPJe2^-=e=FX$2#9pO;LFHI>bsG{eCwFmALvI4#WzO1em z?mqjyI#|^CBr!6Crt=9z&D=k>%o6(uG#%vBElGY@Hq5hM7d2vmfG=4N4B8NXef`yZ z7Y)x0i}2vd7m?bR|3vJ=)lc+~2mhoe69ZqEpBlgXC+@`dfc}HNY9&BS{(C_rln#^h zUE^UtLHZK@iUsX7m`8@M=csJ4{^}2m1!OF*VR4H7o8Nd4&XyPf`~=8jDzW7M+G4i) zKrBb>i}5V|b@kIG0$6JHho5EXua<3o2-D7}(;2`_jdReS?7z)d#`a+O>Q}~w^LF$-SCi|a7fTh*bDL;mF*sK2d`mgZLY7>UHeYWiC0{+&BhWN^L z8cUmu@2L`&t$&ogbz_}Ln(j27P!IDZ{_%)gUgeg-M1%Q3=NZQ)XI+Mlbu(=OyJaVG zvG5r~i}ux%CZG8MNVS04R|^JaLry%l=8@6jFwTwEP?l>^t{iM~7jCAhRfW7r*TdVU zsWR)%#$@hen(<;4$oQZ%8ABMtv5{84g~C1t8=IDz&YjZw(38fhg5WOBtCc8oiNl5U zrz%A@vSaTo{YTLn{XM7RyPFo;)pNU0keV?i46OnaGFyTSjuA}{Lwtw7O41 z_KSMzu%vNrczSqSU0*zo!d}R1+jhDwbHAcsCY~W4;`(a7-uBr<*vVs(UG1u@_VW5` z!DmD|7lGwGcf)T#gfl^>d*z|9+MHEvn7%^DqD>=@MC@lpL=;H1Xz?&_uC~LHC%G3) zb(TKzak?cl_|EouMPa2Odo(spU?yxQ^bA|99a!&|4zDfbsnkeWzg-f!_X+b@i%Rew z`E&rIhKdnd#uTn;K-R9e*0B1syp8$R&mDp`-2@iBs!k0*ri0^fe16XCT9r6b=xc}W zbIy=1>?$lj)r3}`?ND1fT(S~klX`ZT`p`n9;tQKpq+wuQqwfceBFxoCP;HJgr<30A z({)?OhCh#4zGt9yEQ?QGBih*>cZwu28X|X!>VCjv^N+~nCF%IKVxUmOybgW$1L?a& zrDa~>)|dlN3Z#l}WjRaQ#)k1q$uN@Vk)`QKLo>lhBYt`Y$@re4N3-zcohSOj;w@Po z+fs)&TeaqK_0@9L6cx=xfL4osAf1$N*naKL&fXuo?K2#M+0h}y0={)Hr-*~fVq6T^&6v;;UHW<6)bRYzw`jvASm+64{449irG?f~d~4_wNKE7(2QKXNo^gT9oKFL>y8j zQoh)7-e~c>uA|!Y^4PF_IW&~k`iPQpL`FfOn|w~G?d8n<;$lgDo<2Tu)cY<-<~bD? z7h+}W!n+2!k3~gsxxy`aM|44*uhgUL8kO1&wn}R)XM5voaSj%HPXtCmQm<4|EpDsO zR#cp1WaPTZk-k6Ur@{AI-1Df?h3SaDxwjK}AN`(SK)dGAX;H$vqRMOwS)4ev18AxN za+u=rv>V@G=Tg7HZef-zo7TY=ec+84Q9 zh2z5K7L$wFh{ztIVWmbBp{UNL32#@Z-f@MSXUzV^eN>BZrR9k|aZkug_$EoX8>ii$ z7;y&?XyWu*oNZhV4!HJYtX7u_62t_NT2?4auJz+=}D{k+W zzh^apvg2X$^i{G`UjD}dps!MjY;5jsw$kLX$m8rX_2ZW}da5PL-KMTDZqi!v^}oKT zIklxY4oua~mXdu#PbVG|b4ai9`LR7hP9`&B2-4?gYsw|ID@eMvEUfC4auJh}kn3O&`y^nk}-#peZ`t zRq&kQnoq>JSr5gv(=KSpOId6n=$3I z-Yl+tvRaw1Gyl(Nun>>^o`A+m#Wf*>4;nE$w&Sd(UR=Qz|Y#qHGbbZu^G) zg78uMWXLPCzRkyN&pPy`RUVuI=_ zwknYYkV~IDKTd@nCV*C7|9ss_*nfCb1tmB*9YT%_Z>RGe+h5|E9GN{HJ{vq3sxRX6 zI?dIYYBDf*oR(~sm`6tb5#dl6yV7EPYv8@+VA+pV4U&5MJxXF-8rYd zbdT}&*rd15^ous)JpETk2a5M%v0DUCaGdd+X{d&fB3WGkviTe5xlrNhdK*z95uJWA zhKdt@-Et>a-d5jsjmzjL)Tlw#DMOIiiI%-9-{F$Rz{eKsF8Qm^@gSU%(>puA3Kk+F6~#8@p3cvw$Ez%QRO|O+tsagvDy^QhrgNL z+PSc4C#TmLN6JZvaa2QyP!!@`7jz*M!OFZZ!!W}1N5ps?FRoq;_Nhx=T3pQ?kp5|$vZSYz zs#Lw8Y+tAD@C*w0rC&+vEH{D7w)OFX6KJL`?*|lTw6iZgv1O)FsOEyPTI)cGs z9Oier#`z3NVYsUtvM6p{rjXjS{aML+A9CW%H^_pXq9~{l9cRHm9M=^nAW0{k)miL# z=klT==?QDubvVlg8b|w~xu1g4OjIt`diig>#SiKCl5#Au<&2-EMZ?!G@ydUa0trkO zgl^M>t+pz?TfNBZJQ(4$8>u(swk01U*9z)Xd5*FfZs6+XqWps`#OhoSC&NZvGGbNI z2|S>DnnWP7HT}fEMzgb|{WbzU_s2nwHO9VTUiZ#oA&)5 zUml*P-flMui*Q*P;3~34+D!FpGJQ~F6AjEL!pc8ByK}U?mlQ+dvNFU!Dpf1(aaPLs?@I9Ado7V(MZ7ft8)a}zEcPrIWo_4f@kT{5YIFsHp29|<7vSfF`s^ONp zlkGD_wUkDVYMfjbkCp2l6KS%3JsapBL;%Z6M8I^d`A~c**4=t$lOlxf*Fg9keo;z2 z{nE}<)dJeLy5Za6M`sh6Vj>47-*4#58{QuC6zWlR4U1FHA})yLf2GlYgF}AOZW8UZMoOp{)NN& zmXBR9w}b6`(ecP${X1<}4;)>Wl8_Ygn^%K_gJU)P^hu{n1oN1!w#07}^rS!AzI}Fa z6^7y2Fc@U$nG@P|aIuy!(x8EH)8fi?H=USh=>PTYY}H7%)^fpFb@^TGicQ9rk-aML zz@l8QufpY^j$)U}kPQ-T4O?jaLW5#YN_yha=zwN>u|is`cfkWex-jj&S*n)%bk^T4 z9>P&t)!ri6S#IA=yg65Z-TmD#gj37D04kAt8_GKP`c;p6@bFo=&4tT|Cbv-$)+%sC zpx5iLYo9VsURq`MJ_c=a1vmww*G#o}&BdU{wPm+syei^^r?<9Hx38+&=w^+C#Qm@@Y%QGwQdWy0=fu4Z zXq)nBzYVF;9Z`nSC1SRy-q#K5_~*NmP+}7g`|;;o+q|SKhyxt~eM|@E{*VO9YCPnK za1FTSQ>)7j=BBelkUlbcz1ru&Jb7`G&8v~;Bm}p2CitJU4PF zMcea&K&n{wn2#JM)bIWpA;Q8ZtlP*hq*k-!?fOE2jjIw5?tyLw3GoBV08-%LESSa@ zuq;4UJh5tMp7~d@rT`>hFY(gA*!_fXUm{iZl#flZG+E?hy&z8(@KfqzDA z3w=NWhu=-c07d?w6h~e_EB81Pkw2NPFl-GUF(94EVh{V%UrZ1%N_8dM3@)lRYg_8S znh65+kguf$(+qO{1qE&T0nTR+C3_-goZf#bB!6lGx%a}Jm)rc`xp(42qI|SyI`?mu ze#y{gr_v_%Al-~Kt^6x@XT}BQNx^-s^Ji)x(Jp-8vJ-p8roVg#X!sKaNS|3A(r0s} zGSa`S=LuMkS4o@2h~cm79d-Td1Bg3?&i<48gJ35glIv(oV1VQBM5e#sM;Rh)*rUZ` zBawG-N}A*E)H1c;)f(C_W#0lo$I<&a2p~Bmi&$`K4dQQO@*W_M{e?Yy4sp}%_fi1p zBwu#x1K(`-1Thr05EBu{o**?PmPDWaQu`nH^bn9hyup@2HUEbY7{EQLeg|7BsZjiH z)ILBG<03#qJJ+G|1t0={SE9NBlyIuVT~tu%U+5Abj57V&i11)`=c8roZ({~zJcMi< z>7f1JP|Qjmn7ihT&RgQ&&SLf`j>4%x1#3}?L0{y5a0RHhHKPMeDTu$J@^=Mo8{{Fn zE-_yn|5_6O`zYHqRolECr28!<{r^fIJOUPfD3+xF<0qn((f*FQUI!rJE?K_s{tJ9y zh=3_C>4B-p%j+5bitd}I07$vtNOXw#ulo04P%_;B*nJ6HFv2gNM^C}&13*qJFa*&5 zn%ztPVXOTYpxX#scn7-8+{AxzQ)L*yplC1|X%7{_(RpzC{J#`S27nj$+A{iYEwchN z;lpo%P>f&Z{7Xm+EYk*DTcP&1J9Gg>i%x|H?*1Swd3Y}U5ZKap?yQYcf4~?F`!ZAo zFzkF3%+9~3h^=Cq&7;MUDA7Q)VCm%1$s|LL6&?)w;FrzUE9-L-Wj8Y)51gF16Rcfd zDRd^*oy^Lp&7S>yom+A@Uth~$w5?!$7hj;zkNZ_lvm^Da)YP?c>cF6qEVqP*K@*c$ zpefLFD57I@lC8Z*=ej4vWpPWF+9#1bcqnx3VBS%)VtoC!Ul#Aqrj)_+XWf^L*Qf1| z3D6Wo61jI9a@=%S?(ay@)gn6&TEp0>bMr5CePxNt)SGruy( zPc4OpOcOKkaq~X8e;Ls|LdbzU8)vm`e*!fl$sh~%&CYfND>AF%pyz_VD!wtAGWo%) zI4v|os3+>)eYt>{Te6qD^(J%Ci91I^ls^?xC4lYIiOtl)9Bv&fx0;u7SLf8%H$JiR zG^1>J?Q`;#n=EtYO4K)xi~@xsT;3AFwf+KFf)fk;fpkNnB-UL2T*XXPM29BTh4@4k z28(KRP2z*A`ueq7(VEX41J*V+*K5ylSD)Gm8bd#1d%RllA!+qR!_^b9W*pmolbJ@` zeOFBgZOQzc%hT%Puw7VMM4WohB|VsQ6w}D_pxmMMNJa9+rkaQUl9$Wek?`Vt^XT{l zLqwx7w2R8BdXG3Ax$y%^lp8zXwT?pzE}>dOF_*^B_nSJnBcx1e4TVwi&wF>GC_H3L zxx1>EEg8pF-;~4)vezVfqB@3rD%8?-*D^vNJAH(xf$(K-lGyr^$kzqaQT&6f`CzQG z&eOU{M>X$sqPWn{*>WimUjZf_n-6Z}tfjJIpSCgck4xwnTh~L2c5tEzVhY_ZenuVA zPmU8tg`Wpl5+dmvl9q0~zFawAi=@}#MA+@2T`kwbJzTPp{w8S^jP~(A7Vzbik5Vp# zHS^orW$Bpe?T@%IRIZyk`#^HI!f&R_mb@yJPRyF$8EsK*rv^@?ZxcB@ydfCz%$aZO zn0&aHVVlucW z@ZRpJqNDd&w=2Hu;u1`85mq^MWZe6F#=$Ls;H8A*I%`O#x{7g7_~oa6PABV~7vJ?} z7Rj^s^{H@lY^0$g8}M}Q!gB78Qr~9qzR(iKr_SEWhmL)cfmTfgSeiVV_rciacqSYf zHQ7F)H+P%lN2K;D2oswU(`uH3$eye~4oI)zYd+MuKqN`GP7f5tn>RS*QeX!grItr! zwW#R`lO`9PgI2L|e!ht`c)q+66Vx3g`N^k?FI`~elN%2Rg1soxw_Q~&stp)vP{eMuoETWZ28{jJFln{NUQUqVGo>F1UJo_8Zg=X(K`i4sH)ypB`t z<29;h9ApW;q4`i-8n)qa4FgqFpQohn?tk7M7&;SO4Qs2V z7%1G}rt^F*a+!Rb2!jV!%^kgS5g$dm-bRB{jwcBx)<{b{r&;cY1-7X zCv^Pz_DKd zs~+Rvo_P4HOQL&K7J`oSh&-Blen6) zl$dqijbDdP9KojNHmQ3)c$KZTA(Wx7Jg|T^WT*E&#(V0scfEj>VG~?ax&d}vagzj- zYq-A?gY1F(#NMF^J3*F`%sUYQY?Edi$_i7OIRBU$zFlXd*^`4BJ|4klcAZefay(zeTH1sxy*wjMXBeX$wIJlnl00X zRwA>do0dyFWcIs#Jz!0Hj5_kq**-<%AP?Qv#GC1vkLsBh#Y-7{c;A*1{n(s~7u6Ya zucu(ySV$#T=ov1~@}89+B4u{w3JOFpp(0)LzU0N*H3e<YH{|^ah5z zdxz0_$f|G)6163!tD>z`ZT(2lCf^BAnpas_xjp1=N<3r;(?P;m0p4wqFKTc~@soHA z%nOF>`jjXvENM%t%ZuS0Mu#?tk!{>4y9XateLOEtA^y9ui~!z=DGWqjx-WQ#VhWWY zN93pwMU+UE^_pFq>*p}_zT%~7*CvjWomueB+u?_ll=z5Gi+q{5YCu{aP2HqBngi)v z+=a|?BHw0Yxw{9bIazwRA4q~_a8#eg=EziT4Fq{yOgO)|MKR1D9>f2U_>J;P4wXbd z1}bk;0Fi`6;vH1YC!G`Sk;DLJ-ce&?c+;5-J*RtPI9XtB*oE$R2#=Zo%39=U3ilZWn~Qqn{Un6(VC93;LW=zV-ovoL}U9h4Q=` z#Gr7wk*OEK#3a%t zrCNA;pwY+CmibwN@dns~PtMCTg(QQNB;M0O9~FxeI@9^WQ9o6Bqeae`j%pc9{(1xS zb)biqj*^+<3G3C#Q;kp%B&G06|A-0w)<>RHx?9&t!K^opysXl%FVcQsdVOhNdV+Hy zmq)_@8zKIYlkREG$5?dMS<)DGR~@*y`wru1wtPZPUxTbLnN~RC$CZxei#<2gv)Tso zKv8hd9Wh2!&*+jU=eg4UHcWFEnHR6`#>1c%%kVzB$Vs5c|!cv(N#SOgU5G0uNIfv4EP&d5PSh&wd949&%G z&(|j84#Vp@3wv6&f5i=8Ga;3lbltmGyA6Dv*NIn>Jlqo5SauL~&}p$mJ!8I39sOM$ zn9RHx?NhG5irP#sqSCV2CJS_3j4+WMYUA)~Y$A@}T1K#rkMDDQ2-a*;NoZ>@tI7Q? zQ*;zLo4Lp@L*Ugp{d0lDd$Jy2h)_IWn1c@-|Jq5I&FT^&u z(_djqbymj`pFpfi%F`HP`eZN_LEoR*c=M&pG0-7EWa=2yOmV&Fpysj0Vgs%;x++(+ zu#W4Oc)e^Ok3=`+NUUI@8%D`GUka3uu$YeH2Pgr-*|4&Qa?4Nh<5(r&j8WWf`|}E0 z#~bjwEHi{fmNBvnM$xx8&7RtJhDcHta+Zu8Y>CkhN*U0#j#8>PRTj6Ing zjUL$D)ch*o);vnyvq%&^wawdh?Qg5Xs>MXbA=jm)c^^c^ZL^ZEI+-KK9X{8h(Km5s zR4d1Qpf$wnvQ|K$ZA168sqadpRvNU&4>IfeQeOE`*mjWw~v)b-O_{vl&xHDFXk`QB6S9pI= zpx*l69Ad~*=H%1GD>-=Fc_OsPwJbGBIHIetF4VB*S)*;G&rcQ4k;8EvBjx|6EdW91?0sLw#Y7+&S2%g?+N6L5)Du{=>QzX(<|m zxxjt=lP#|nK+r?(bH6Q*r)%SR&l4`TeV^v)BNVjc&sIG)!z-`~2sb9Xo4_uT<~JQAc-p&vI=No}?~B#KpQe3O zdTOZ6SAfjJb}G5sldZDlN=|Us!^E3*HM;aZY?m+aP)2hdfIwvIvN5kb8$iu zT4Y97szTQijz7e|sVXLThgBGkEx|~|K8(P2)?ARNvlcvo*c8lDB60loSb1kIWwRVi zSYy;+brjcsscNXl;C+^NFTQumjc?p4eQ7=Z(QW zDuO!_Y)rW-P-C6jX^4Nfw?HJ8c{F?}U|IO7SqC`wKU2xI^S5;sJ7c~jS(&P(4~@bQ zE9Zbc@cx8MJyaaaGB9sRj5g)|JXrQ)KIiD8>UUmQGQlS*jMDDHjAvkp&OXC@j$zW0 zJI!kj&&=i)@6!ql)sfpUco%}C_cc_wDkbG$+Ar$o%HMrcTNB>cXVQJ%$wRTavH?*m zF^rxptz~>ZfYi-xatje?Y||v4PE0HWd@p@taxt*uakwx?uTI@ntRKdi(eTE2J|v0# zrkN>UOH}yc{9LI!%Vdh(cTz{;dYgICV@H5`NEf5(Uam&dv*s^iMqvd1lV*AFse=8R zzwpD=1G8EZF$sG>BI}=Ev>r-i+U@}9?2?FO)E`V^fMP~`Fq;4)DE|i)WLX20Bz3X* zCs1K_5DllF{%c?^;6-PxM}jd1|1pjLI8P?yx!0C$ujj6#zW!I`1Q4dW5CC|2!;}LR zJb%H>NdU7<5uKyX{fC$WSkTILHE97U#0@#^KO*#iMj8Q5;ye}iI{OcH0w87!K$Hfb zTKryTU?U29CY&e0qj*c-*8BZMZ{UE!YQ3zR`MTfK>KDCH0O(C{z0<#(2Y{lEMR-|l zzCdYEvjd3rpO?IU5gcRr2l8d@ptGp?H(RX(UI0JGg#U-(iiN@b#C@PM0kCXQaDOI; zeF=<*khLW|@cj>x5dmNukjStX_A{d75!2wpP01TsbXA=DLIy${EUfq4bR2_BZ zZx20yxJM7_7}J%10LYIkYS}+8fEyD(NKHk{6aG*qU4-Hm1At5VJuMIXEe(LfqB3@B z(=+ct0q~&u{pLeO7^5Ev8c-3|5trT`Zy$Xm%khQ1ebe!9tPlW+(`T1!z{iEXt~<~H z{r(68_;9(ifCu_9V+65adaxK!?)+ID>byY!%_UI7#(O_lFZst5fj)QuMT?rA$NQgB zDlh;69qeVn0NDPAmaVtIOvwc5Kh!Rvz1K%TsBqoJ|BnUyMtT9K4~1omzMYBxLuZ#u z04wavb^hxCpwO(W8Hg1(Kw7D0@^@jH1rYo;7FxQC*nj!-3?SQ6AJ2HM|9PjM5P=Wa zDAON+!Ysj=k)MCSVVM@NCC+D$ng0s&vWIQL(|kSc@v!7ex;B;vlaxKwl+`r+n7038 z2-q-qF#mG3RodTpRV>g4z|Cn6=R$(a>oA@n51s2QEmeP10?d7Klx7z#A3vQOGZe0EcE^Y=F_#nsMm}4 zKZSp_oQ{I=mV<4?FRKr5UyfhYcDZnFTre4RDt*33aK6BleBPryFvEiwEV_%5p-3m` zmQXm!8bQv}8Yc26lk0S@YY^pj$s0ASwk1U4n%4M6t9eE1Tfce<^n(qz{7R2T@W}b; z6P<>c>j}Dp+oQk>ulAiy-Ykto@Kw;6)YO@4WxO>@_Uocq z?W>vo>3S>V4c}?BYNkAI7r)Q6PhM^ZL)ETK_TCs;>DD$)HaJX@1J!1oUR7;uU=f$fz2G1G)FlJ6j5Z%Wf7H zJ#uAPD)(AOS~xT#d0Ag+fI(RgsUh418$;^sgK z>!Pkc6;f>X+`$e5QXm{vl^+?vNCPf>_0(K=(FaGMnan}-6hTTv6jx(AQ9Q&j3aYqd zXU6h1K49Z3M~2hcH`mH1jrENbl&mPFuBm}7c6rO))ygu$m2yPs)(a(15Ha@yfa^Z9 zEdz3zX}b$;Npyc_>_tykktc&QA9ErnL2`*FUA-er2QIa2^Gg62kMzR7v{H=3O?ss%m$>Kn+)mA9!&BrPdMf9 znch%l-iEu~wzey!-FJNv&zP`p;A4O_T$)TS_YgEBs7EGtBkegz(kn6t7|-xdOloTA zR4%i0(WlCC$4%P(605SIuPncdJm?|4N)Hs_Y{CJn6b!L(1+Eh2jF@@QV&P@XsF zS-4KB-^XU3r$L>j(b4hYU%eG`JUtpZy1G;b1w9XQXYYljSqq1B{bUpr+qGJMKKF1* zpFLl~%8&%hG2S#SU=!hoIZWMP6yRdxM%f_^W%;1^vpDDbW|X@@~sf{3Qs z6!FB)#-b#5>yn6D?in=~(L-(7r*M}=R5?-ESmz)4y?pUZdfH=%go0X?g{z<7TVqrX zZQQnSTB7yHT2k)?Pase`?y*QR8x6+5$21R>XCYr+HYyo!zu(K(Dd!U*oJT;@x;Nz| zs_su}d*ip85Hs&MkIpUX`Q*(zjYp0r9T+K9Vd{;xPCh5E1ohEAv_+KB$1`o`eI)2* z!MOK1jP#n5xRx%oT6}JQ{JY?c#GV=YBbaz)tLH;grqs8tY*mgOAJK`qj*m9eH9Qb? zhQI_)UL750v|N6z?}#Q#Ret1=%o9Yl%#R_6^rHD4B?NzpB1C)hjj(&;`Hs zHYeN^FiAYk5|u;2k@D^QsW_#zJL!_GVRo|5)g5!xNhCS|8CnIM471C{MblP_yF3c$ zI1ntGTw;|Y+3lSkThsHOpCGi^U5LJn3wZtJx-%0|iLIU}evB@Jc`Vb#2mk0u0E6E= zvDOwViC@DviwAekGuafjw4DA4SvSY0(%i?bPrZE*VyMU$cnU3I@|6&0>&x%o?UrZf zm*TXUoTMz^gGKcmBR_9)&qHpi;;2J1?qA=w^NtDO(J*DjXszuPNYE!si=mhX+w;SO zqr&R(^p9FXG|gKp0$PsCaYV-sp<19~`u4Bzo` zh=?*F9Sj?SXTQ!TLy^Tu(COisq9Zqce6qVjL|3Hd8oBy?WT?qOy*c=__EbdmbF2S^ z>H~;c_* z$^2T+qNh;cM}o1%_qoXZMtqiS{`!!fg#}wUz%gMtDUn=SJg$k5*r*$Lt7Y$8aIX%d zd!>hH)`Y{R)M24}Wx5jAw$N2df?t3R^2Rgy!eh%2w1aKZg3>CP7X6_AG;eUwM!u9L3B z#@CWOGO}13u(_{F_^#L6+(s4C8e1LuEHPY6l~{Io5?dli*7pk%jJ<_Gp-u0bZrPJm(xK!xA`{S!wuJqnI5Hz z6XuJ9%ao(OG-!9~(CR>`s>?{ac7!Nh`aSy`NrU4GnwA+ayjmJQY7DBtYm&TfwD3uX zr8)kkdonpgY1*xr-Q)vV`!rl`SAn%dx^sy`C!_uA8mfILUn*~o2s9qurRu(m>r*S(Jv#Wm-!IlP3i#XnI(tGU$sUq z@o+at-t|b(*UJlLPr_y(wm2atHJ64g-(_wvEw6Q(f?FZXd6>9kyHbvihOSMJyIndVcJ^s>cCQxCxuqPp`o^d(ENpX7vpt7S z)`l5xT38RvUGkZNKwBV_iwm5C^#SyZKLxF;kg9<+8TQX~t0AR!-C4nz&)K_|CyxqE zg>fAz_*NzeMH)$c3aJh|A*Q7B4Z`anhMmgE;lTjTRO5{JHS+`9wF|E2Otb!6ON*ag zmbZfc4_#UXCI`_Dw2{!?_3(r8O9R)}8*SeLR>n4H4$QbH&EKBVe+{`t`P7{?bunI9 zVY)CSHKyIQF)PsEe&xI|>6SRL-UIK`{0Q(rZVET&oFTOY?)WX3uPzE|0eav)zSB-*N{}vqx zH0A%}9PXQNi&%q82jPt!QQ#dG=o|hMg`3SkpN{Sv}uf z$(7PKU~G)z7$!G~|4gw;?BLUb3CP3DTh6T3Z@~jFn+`9u*b&Vsk0T&=BYQa@*0rr& zm@oyPnGwo3%S|Z%Qx7Pu!R{WpGl`2n0$YWifMrVAQsT~272vE3(+)EMU|n}Yb0=T` z4Keq7{to&OtHk>aoNFP1h3|a65^e}QI;M8IE27f^15>^U$|>vlx26-3*7YV_QRT8} zexvjI2dDh!D=WE!zuXD$y}-3+#w|txs85+^58wlY9SCRwU?or?Tj0c(`<_}4!BgCC*gIcD7Bsb!#jXt3&_rBUSz4#$aaU%;QyooCjE5bSK-ah z7dS%t1=j%Hb@|;sg6<>Y6uLc@tnbuaMco}n(+s^gu6eVP)o#E;kIg%t-G26FbHExa z``nKktKnG?Zy9IvD9}^j2coVMux5XEdMdDF^7l_f{$r-)FSNE@beoO0MG($!g>eWd zubBX3y1)}Va~EU|WCMHCbW8CF$S!%)%r`Uwm}NXbZ6G!3-MDu)*B3ZGlkpt7OHuJl z9sqsk_?|H?{tsXJ2MCt90;Qu(A>)F7sna(wK-A9f+p7)VQA4^Tp*#Z;PNpu_sNd8q z5kWix#{1X83Lvb12fvsC9IcD8N@uaVTEYMFY~45nzfBXu&fv3n*Ft;Sg#v} z!Q-BFW*wvBoJjipCRsix7mMX%4g2z7hi^WA+H`GFps~=>jJ%ls(E^OFso`QO*R?|= zl}KiD02H*XJbwwYfYoJ}7mh)U6lchjc3g*|$7hal$k+MrStYOer*Baj#YIzfyf*L? zyZjLMyK<{I!NyK{COfpAJ?VUY=B&3DP)!Zxe|c75c+IU)<%BcKzOKFYH9}{pB+b*( z`7I}=m}=8KDt$$G?2(8>Gj~4ZwxjBR4<(b*U(ILYcp$vI<+;8(rQBT}o7O~%^QS#$ z?)xHk;;7nd8yPnS>^?EcR)@JyT+BRJNwWQ)b6fl(o4MLtt+~ZSCrPk{EEyi!-J`Kx zc4%|8Ma5{+08=vwdt$Dti&n?GGwLFjW%|z2NJOPy`F9+~y+e<8A`9cm5I*+xE zh!ivMBhJl*-ih&TYKa5}N{kNWYA)`1&(Xr2-J{Kw5`zb>ysk(KQ4R(dDNPAv(AgS- zC4DJ*xdc6|VM-^iH`GjTFr=6+DSHX~TcUi?#SN}9RkD}R_!aE}XUa&H2wjS@IUvgk zwLH~Z3kJ&hNXfG$`08UXJBEeo#Pw8?>zmAZYfVon&9^iR*VZCC)Jyi} zAC#*c<4AhVw0Vi}#CDsw&NESfu>F0GE3JG@=UOYVe{7!bP{2h{zC_^HL<~!LswvWzP+_GzDt;%s@>EBAFaI>aie2w|a zzhf*s8{=t1Gw(46b5}R0Bbv1`2>$sK*w$MW7+|zF@vIp|?|BTH7}HYXoWhX&rupKQ zL0fX5Q0bMo%tp|Y9kaB{v0qE<7<8X!5N)7`@0ViKENs+~9@5Clhm`SmWGKn$zh#3W zC+m@e9Bk_2&4ch9jZGp;B}V)S-X$1CmCTLP6Gx6Ev1%rtvloS|KL|s|4hdDR`#2JS z|8A-~s$^@}kT~)>bI44zIU%$lQF{hETzR8DmQObAtHD9b*a%LQPI}n^6BiTV(D9|W zS0ug{ZJTcE>8squ^_Z;WQML=UX%Hg^ily%d!DrS^G+4jP+|%CS22b+sDFPsrjos&$r(1B{}lVG z=&SnBGe)Y{!H&e3IZHW_hir^h;J9Hj(dKj(E_^HRzFx$>-itJ=fp>rA5jxj2J~l-0 z!H{@PV(fWkg7^~ycxdEFc7rD=P_C0*LDD80spm#Sa&W=gVy4ezy$b}#p2C{j`FGaKj>4(@9}H#Ll`)5mUX&rj zKQbkFQu~#(fY*E&yC>x?Jb^Ry!n-U2ITy4IfS#;#?GY_&l@sUiOAYc@b=Do6*Ben! zBxvzy^#jdENpn!K+t2=-r(0ze&?q1cWPV1t!ePU6e5z^OrM??GP>mzm^crbB#T6x~ zM_#T@sbvZ;ZP$W0GjK0?DG-=!YtiPpJER_Va*CwTq9!cG5qfee~;>m62hu|}E>fxfrix3q)G ziwnmm4WP9P5+z}eO?1M}4rRDDYT`x}pXG|>sS-;7@FmkC9u8Z{*ywcdQbbYnKOacxSR$2ds4K* zs>M5N*B3*)r9EmF*y0#We2#74%pdK{yn(~3)*x%-dC#E_ZiT&18?qEezt0sWX!o~6 zPMCN4$YgwuT#l@r#3znubsj!?wP@tDH?!Qka~#FUW%&xyS=D}LY@ z!4Bg01vBxX)aE{IYf>Y?Q15Bo1+iF@jjvaVjDUhovB!jUxv!aK$O4Dq)T7~j0 zABH-`hkb2%)Y&L0NF8UU>!mwSI&`BNjd8b_KE9yXP&*P}C8R6yyi zramHIcd*=Rz-rFNk<90r#hU_NG>%&m{c^9*3w6QK8o%+}j!M$|-hv-nH~1(?QY@77 zIL|D$belO553eBtGLyq7GspF)$iD6Ud|if<1;Yl1N+biGod|8BLbe;1!~LoSosz|a zrfPBmpUJCs_5kWCiewV?mQm1H5E z7)xI=X`!xT@1E;EB+tTA++~fVI^ki}8>ESo_&(6ii30JSSC&mh z`a*UQVCq2x+Gpd3&cn#KTev&UZOD?|6k+zSx{gRJS6bpwc6T6ue9s=$OQ+>9_Pz8I zI*7vOs(#WFGc5ZE0j-K$LBU;Efn>)vUzvd2pQzo>LdfFGQ#*FJ=4I`0zK^=ld4|M@ z=-MWBICGwA5^3!C?x$bQMOKJx%bVFeiV&Z8;eh#r9c?a79j@n9#^4-?Vyh-H)cxW~ zt6O*Oc9B?2SZHG4DH`tMryRIZSm%FCGYU*LTS{4d#icb2MeCl9t6x~-UD$7EUO2DC zhU>bywTObq;$q#!!T{MFPds8K9gS;;Q*$roYqm!TiC!gbO4VOhst(@BuO2V0utZuP zvmOpBZ@WL-f>x6k&P6;yYq|$2}a|(C} z*qb0Vv?2`;PZ*2+uqnH#hiYmK24gBmMunqN;m4A)lg;7_e2Pc-A$*r zH}{c?<26-FloqG!t~?jtGFm4olq7oKC^K-fgWTU+Kcak!B(o~mHJIh63zSV)yxW+5 zAH$>cBUXQx1?p3utn_hRLt1X{{5LJd!8A{ppSEU|P-3K^%5ma!cV#*zcoyHdHi4CJ zt<|H=cYS*UduD@^1oxT$q;-1eWjp7Uoi#m*Et#{!zH&%nuUR%y<(nu)j>?wc%qmr_ z)Y|Nlvv=-OWB&~?bGGCNklWX_0}P?X#@E;8BD-tr*pt@A*mwfqHzHO9HQrc8%x8Wj52WmP_pPtqHW z`Zcw}SN4SYd_teG*_dyUpMUm;bV-FgLp^zXQKN!RI@}hiV@x3QzE0HFL{Yhn@ONn> zX(MRTf&#T2ne`Kh>w(Ac_ijCBMUg|OdRK&F?fs>A)6Y+^T_+n*KAzFjpMto^8SDje z0@b?fpR$jurw49u?0d@5>T(aLw8|`u5Zwm8*HMmqAEO zNgwh)xa-NcO(G`P?D|;gW`$yD>1@xMRCv&IImUzCZn6qt~Q)^wkyf)M~F)%Wf_E(wW{s$Cy-9nQ0DBz z;t6!!E4YNLTqcj&tw=beyJCd7yy1A|5%J~mho5x0-jK>JqgPi`h>9X28=D;1{FQ5- z!um&$mLlur|64<*LyCg%iJp$lod3f0P4GBsR;b#r+>lFOo>f;!j5P1`R|_#YeW;lm zI2=w1cl-eQ&}y6_1n_UOuj-L9>c`?ugN*yQh+AI|%Q-TJR;BkE=0WreiCM;y-sCbH zhd3jV_h2I3LUg%Ba|OhN>8--2!#0}yfl zWCX%@hi5&9DtCkw(vR@~c(P2*bR*t^>#C>_M*;e=_W=MU&}z%V+dv&aBMNZerl_sg zQtxfbBRC8Cb`ChxocL7={tpe(HG5?a5zz-3H0@-ZhOM&HqNKhB0~C#Sgd{!n{<2E1-u@7Otuwu6UqSa z5kyq@CyN#ifWSru`o1Xshh7A>Fb#A~0hm}yHG%ctBL%+I0gR;q3mfjw{0m-yv`c`z z$zi+1^tPMh;RsVkS@2Tp&JyL@QlP&z!0dC{k=GF3A#ebvfB;a#d1<-hwtW`Noj9aZ zfQfK6W!6yKX&(ugJJrV<)46vj8UhNXBp{AyJ+(0Wr>4LaI*1Vvks$-%(?yG$>5kh^ z3k&F!sW!7R^uzxEEx4EV5xV{j0~EkQ+CYXclr`M=*~06J4EQ~XW(Ym$XS9TKCg370 z$R;Q757*2*8o=cuS6tw%PUCVOaDRsG_|O74t_X(?uHfJN}m(|@4N*ch9#5+*akXI>p z7UL06jlGm?0t3Dn4z$heH+F3spqa`>w28Y~MsgHOdRVUo*^4_zD^=hdaExBEIGO>N ze;^a#Uj?B8;F%p;v&Fczo&#%XqS+h|-10FNe}p>q@3#>AYbSIa3GgL;P(!;)E^MVr zSu4@?r;NG!t+(pz{ItY1l2Y+lpZ>SnhmWbqt_iC_OH@QZy1TqV&M}a@kUzNG3o-pJ z!@xUT7tm!v2Hc5NWyYmF7x*yt#P-d_j-JIm4NIB2_{4iAstW;m8OSWVNtQ~iRdhPK z1xGB3Q;B4FW5qnWYs0^ZSyCTnOE7u|5DkUkDPKpwY$WC^dhuKexB2YQHC*o*{c(I) zyiv193g%oKBH~v@2?>-UMYCG8CSa2xe{ z_shAD$3&$f3zK|__|Qe_#%N0a5aG3Xt%rqUZz#=s6Eb(?>aoYSL-ti{SdNUBF4E~V zpW$vx)Oa{br0=vUwujv>7LpCem6XgQKI)PWJey~`2zaJ_x%Z=^{q^}Sdxj`tT623U&sJ{j zHOFD~ot$MP#IhW4L>C>k^iJU#B_+aNP&x0sT=ry!#)6C5QMJ0stOm>XGYqEFicp=5 zlw)e;$%Au5aoDot_bV4*eG$!Q-?_rj^+wkgl4xnCsvSKK^2I&>wU6q6_sKfgA7 z801f|0Gjs#TOuKtOfCj+&ekK^wSQPMW?elLXri238D+xE%Uf3TwB5E7Nzs2Ioo>LE zA1U=dh6BiNV=fg%ox@h)fl76Ce5#_xM}qFz;vR9{xA5D~c!#m5vBjvQ>Uiv#qMd&E z#u?oxGt|WmYtnv`k;rVWwaQK4=gXz2KNn5fqIy_3LNl$gV%QuC4~0qRHmrK@Ox+4Uu9SE!#+9-!^{6p>$f$7Ea;_ZBl=P(*)9quPec= zvB>Tw5n0+$PWw~5dTKJ|o#~0kUSPdL-@w4u%9ouihI{*f@~gvToI;H7TCbwv`=t9= zQ#vA(MsxD^0Xlb@P@V|(^ES@_o7{ah2J*y>1+9qSnA}Ko&f?Dn*BxYv!8{rB85rS( z+4(^WBLem_;#9=4-{uLzhn)-g>>X)oSl@*_x~|Pre_I^5k$l!KL^31KUA&yhJ6${H z+f+#?SZ3QzBC8VpoT`BUk7OxoiZIiYR>kVR$ z8Y?luH8FLkkE|As)%slTEUnldvrWF+bd=OHLJ8s%SK=TRla%Nb)2*9xlN)_<;u!nE z$tm`G$2nA_Uke)8>l^gx8k;FLTB%ck)12Giaw!0|(8Zgo zD2Wh!W!KJ48ZE&H9M2h^PQYI?N8gn?faDPjIPv0_e@ z>a)@PkQja}VMt7RiA^Js2h*D;thh>?J!qzyA@5T@rR7f3Awsgx@=sNkfRwl^`+X7{ z(<@+$OGd4+=Twm|A`qx%zsSX8&`|8O#ylIGtGSQAH+Gc81sFeCJdsCarWG~vJc7tv zWQx?@eu?CK_l7l8tIA>j-;?~TEgdc3;JeV$1-p?M_8JFio+d&*+MDAy+{cZ~Fbt#B0_GYhm zF|Z%CTy43_add5?&@)qBZ4QN+8Ks`L>#q;g{ox$1xqO=KGJ+OvzAL&{n$Aa6rMH{C zcr~M>*PNy{R4(ihTHr{gYx`BHOi6$579Brp?g>m<}4b^aqzABjasWYDw^l zG}^F1wCxAw?62W$KN51UNQGb|`uN4Mfe%G3LHCS!9~1}Q6PdOhpnUH`*~MFD9)#1D z=|HseJ2e3v%T_Q>bk_(6!?r0!1*vxuoT1=J%r3Q#N5BZkt4|n}s&}w`ura&>*A$A# z!Rf*gk2M#2#@%X~l>Ne9eKmAcG1IPg6?3qdUR{b>@1s-TQcmj06E94i11l|AF7EQ` zm+r?j(8pgpD0haMGsvanr+k-;=o7ZbkMG7_ddW38}Kb(XDw zWQQ7Mh`L>C2Z6=eunqaR8={|Imr{)m^OGOCGL>rD5R)=_)Otq|) z7JCs8P>bPr3c_Gk+$Yh<$;3tiRm$|)pNo_kC^r*4P+f2gqu5VYV6p!1+i6ZzRPHk( z?i{|7q*LG{VKPJY(y$XS$&}o57{@_793yk~&koYciz9VK$F*$xzU`l30YR^>CVkwp z^@HTuK)Nnhe0lINsK0D`vNs|4WH}++VCXq^k-v!F!%r;4*5hTJa_X>OB%FthPZ`lyInXo{}whWq?}5?Lh?NC6FxtCByPA~+Zy}klvCW%T$rg~ z=1AeeBZ?3X6A32KfL+MM7SSPb4UcuL?F=7?3q;IIE7VP&cl+5u4o7J2f@e zWg2S`y%|;FH2By%2S0(o_IGL>mJ2Fz3=%cDta_@voR|JC%ORdyzXwnM)FL<7qDbC=?Su6W_f#qaSxoI=%>o)rQTF>r(M~G{Ie+%ku{3il6KqX)`LU+f(74Nz zRWSeVRQ)XbgrXSF;V-hnQoVNmj}o6MtRIYKxX)l+l>H$Orow8&6Px{UA$+;p7kYGZ z0qC*_2+X560BGp{SpXTCTjEno#CA^ll2abt5ZyW6iX$%$x&fV-0gt?4r2Ck@SL&D- z%UjOp?;%Onp3PP(LbD8(vDW(++{bmo9UD<$!0J<~^01p2-Q`x@b&aRkKHaO~`S; zI^RrfPd4N&C~9B!A6d!665>=#?B|$Xg)rxsz6aCtx2|6{1#*Y#wKJaHgUAn_rJy&AoVj4$5%x0w%fv0J0%|w zEB$~^xZ}V}za_OjzoX@OTP@&vuO1J|&Ga{=6Fj{R5NDl-y5HE){u;tifb>sQkB4g{ z{tMZ)`jJkj?SM!TyRY|7@V5w82wfa5kN!{e8OjJmU{>B?jA?LCa>HjFo;4rx6#$jN z1dDtB4GLf@@Qg?Kc6ekWccNE;ZyP}P`E~n;+HLzLa_)uM0)#*ar~EPY-yG`jnMr*H z6sb%mYy{j1KHX>F<4;iU4gPoh-!WOhNJsFyL@AHh&i`VB4S4!>if!kfy1v_NSO8A3 z1=^n6YSjHlN%Xi0rJ5Hgg(nD_Tr|_o_)lL11oMCu&Nwe}>F_qIIee_m{&4-xV4s#8 zeCR+@rUv*dXi)%DQmD&cLU3pB4o{_FfIjLl0CFdwPjv?}&MWG{ZqNl1krwjJ3_cD4 zp1SZ#O$Aw_6Gxgvw_?V6gbUbuz}Nzvw3}hW|X`!dH~Q2 z4%9wCdDM~}k@5{-Ap2>40Q?xQw0d!)I|{m^JNk)-Xm*s1Ok55 zFK`VQR;ZHqf2DWlP3v!__1h`7P5P&%mO0W!u?yVV)PLEhaid1N*&}rT5HjYhi>Ijg zdnYXZKseCK%T0-+f13$SKvE+@c@5w=MH-&)ncJfQZ2g}auxsEl-0SOxRtp>8KdA6O bUC0ROvyyBUC+EvR3Bo5~$@fKqS|0x&d(orn literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png b/all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png new file mode 100644 index 0000000000000000000000000000000000000000..58be65175b5ef6092e713fcdcbd21e734ea34a7d GIT binary patch literal 30434 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 literal 0 HcmV?d00001 diff --git a/all_static/images/migrating-to-v4/migration_geo_autofit_v3.png b/all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_geo_autofit_v3.png rename to all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png diff --git a/all_static/images/migrating-to-v4/migration_geo_autofit_v4.png b/all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_geo_autofit_v4.png rename to all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png diff --git a/all_static/images/migrating-to-v4/migration_map_autofit_v3.png b/all_static/images/whats-new-in-v4/migration_map_autofit_v3.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_map_autofit_v3.png rename to all_static/images/whats-new-in-v4/migration_map_autofit_v3.png diff --git a/all_static/images/migrating-to-v4/migration_map_autofit_v4.png b/all_static/images/whats-new-in-v4/migration_map_autofit_v4.png similarity index 100% rename from all_static/images/migrating-to-v4/migration_map_autofit_v4.png rename to all_static/images/whats-new-in-v4/migration_map_autofit_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png b/all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png new file mode 100644 index 0000000000000000000000000000000000000000..2957f9f9bebcbf49b8cd8dea74f8a6f0b3eac33b GIT binary patch literal 34609 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
    i4*S$m{Hj@|Po4gz?^ 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 H9qRu9mwdUx literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/migration_sankey_sort_input.png b/all_static/images/whats-new-in-v4/migration_sankey_sort_input.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7419cdd81fa994be0cf2f2e95263d15601e56c GIT binary patch literal 36483 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

    {n91mn)813ZR>lj?0=@xVq`#kUuF`F!#%L zysoRVSEVRvds$_*j3@8ntB-_J5sv=jw!oXW9=|PINSU8HS2dTx4f;}%vBg-XFK zhGbhpe#azXra@kTsERMjw{5s!#E6ztlg0_GA?cqBBD;5cbv3nXL4`#PJY}z0Q+<*6 zGJf{hBci%%pMLpv2^qFJ2@eI(;zCQ|;;5-dWp%d^Dr+B~+HI}wA4Zu>2AwY#@+Iff z;G1CEJ3$)i=(_7V()FrgsBb}Y?{m@?{Zg#KDNMmQ2j*_$;94Vps8R_jE{ z`@VrX2@JRIg+o*$d5|D$+Q>6%m6tu#_V z_Mu55)y7_js9d&$$Ot}sGZQ?|uLhnMS$kg4+%_y9fco4MTtCL?ZJs-Z_KuKgEcl|y zkaDb1qzmDM$P6eUF?H#1#pboHyj6d?r3Wf;maF!aZ23j8VFx*k-cWo?cK;!C#7Lub zA51x@Sx(F=I!|)zbPcp^NV_Ax&412O1Cf`vu%TBo#ycxRo+fV=A|&r@YuH>Ii5iRJ z)+2E^J$|b8TH9yz%pQS_Wy9r|z0ciqeyqgKIf}*|w6M>$u~jDx8uX*CB`+D8xc_=K z^f|TKf7-t5jc?w)`}cE4ia{jVW|PGJ@5SGVM^ax;KA6z)LoE;PK9nYhJzH|LGW73N zUsa!@<{8JrE{)15SmnlH=n1Akh-DvSPr&p7jSt`UPmLhmtq5t}dA@i&?%?=AYb8YH z9O(6c%|DTBFgJsuPdj~)XZGyWxcty(vb$Yr_2u=RcXP9y%+0xv3q~;6#+zd6r|HVY zCc}jb;RyY|7bOcus(V|&fZUiM&SWW?i_>)#+u!ANv}D4-MR{;wGCh8P9sB<5Hm2}D z3dJ&_A3lr&s&mFb;~?`&%QM`rWsu_7XhdHvNYIRr#Nb^Nhh8V({5{7+l*`}!5~7F_ zGnguHDEH39d`z+ep)uFvunopr{GJNOv$4q~37YJ}jCgk|h|QJ3nH(K>KcT|}u=NSc ztdk0wZXHEc$1Ztm%q9e_EW^sBBpl;I>qPiXiZ6A&bY|>MzEETK?}Or4!yo@G|1>Ge zdT+>Bt1k#E%ajL9mT=t?8Wn`5=!5OS(xqPisNc3#$hQZIgg|s*nHB(fL7T)C&(U$m zhhExvfB*CwEkzlRF~+wl%JtXg7!(chL-UevVDOWq&IvAR1BqW(_njnS{lJI%7nmyUrQo+e2DZk1jN0_*^-B5-tuvkSus!=6_-7iX%r26tREZ*pTe!GU84RD-PlwG z+~pU_2w*Zgye-2S(R@ZxQn8RyN0gKRQu5IS~;0Iob&4@v7IfB>q*{&Q)JzjCdVKp@(- zI>hc}cscYMeGU$x>-AF%Upg;L(I?b7$0L*e--?6y; zAj+PySSBH^V0jFpngNrrz_9NHF?In9E{gBRywUOFIq*N2D&J?1Hp0cf9P}MC22^te zg)hVm2xFp|+E-hT0aaG{5O}DH1SZs@w@fC_IzIu#SB*iuD5yvqILEhmYNu}jlC@c5g7Wxs%FOAQOLaOs`f6(>s;A36zusx&@tN-L zTSST($%lYAelUHik1`B8FU}?P<_R!AhI>+E3V~NCC@2_P5631O)tEforK#9`#T&yj zW0P%1(Nemo&l|iVdE-;2$qx8r=!gXuc9_W#E}F%1Cbcym!>?*Gf}`LDWd1lP=RNb_ zJda6lhfxrp4Yyw)-Y$dfMc8J!3{s{n{3#$G^& mtp3;h|34SUf7qXlRau{*(_YUV&jCSY9@KHOW8|Y3@B9z&qVw_q literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/migration_tickmode_v3.png b/all_static/images/whats-new-in-v4/tickmode_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_tickmode_v3.png rename to all_static/images/whats-new-in-v4/tickmode_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_tickmode_v4.png b/all_static/images/whats-new-in-v4/tickmode_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_tickmode_v4.png rename to all_static/images/whats-new-in-v4/tickmode_v4.png From 2dfcd3b752f5e50a716d69e07c901c4f159d22d1 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 24 Jul 2026 13:58:20 -0600 Subject: [PATCH 11/25] Add additional features to what's new, more breaking changes to migration guide --- .../2026-07-17-migrating-to-v4.md | 63 +- .../2026-07-20-whats-new-in-v4.md | 1217 ++++++++++------- 2 files changed, 805 insertions(+), 475 deletions(-) diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 39c83ce0f..96e9b2dda 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -33,7 +33,9 @@ existing code or input needs to be updated. - [Scattermap rendering changes](#scattermap-rendering-changes) - [Shape legend `line.dash`](#shape-legend-line-dash) - [Overlaying axis `tickmode`](#overlaying-axis-tickmode) +- [`splom.axis.matches` default](#splomaxismatches-default) - [Sankey layout](#sankey-layout) +- [MathJax v2 dropped](#mathjax-v2-dropped) --- @@ -74,9 +76,11 @@ Config options removed from `Plotly.newPlot(gd, data, layout, config)`: | `showLink`, `linkText`, `sendData`, `showSources` | None — remove them | | `showEditInChartStudio` | `showSendToCloud` | -The `editInChartStudio` modebar button is gone — switch to `sendDataToCloud`. -The undocumented `stream: { token, maxpoints }` trace attribute is removed and -now schema-rejected. +The `editInChartStudio` modebar button is gone — switch to `sendChartToCloud`. +The v3 alias `sendDataToCloud` for that button was also removed, so update +any `modeBarButtonsToAdd: ['sendDataToCloud']` calls to use +`'sendChartToCloud'`. The undocumented `stream: { token, maxpoints }` trace +attribute is removed and now schema-rejected. ```js // Before @@ -92,6 +96,30 @@ Plotly.newPlot(gd, data, layout, { }); ``` +Also removed: every schema attribute ending in `src` (`xsrc`, `ysrc`, +`textsrc`, `marker.colorsrc`, …) plus `layout.hidesources`. These were +Chart Studio data-reference hooks; delete them from any figures where they +still appear. + +The `Plots.graphJson()` signature is simplified — drop the third `mode` +argument if you were passing one: + +```js +// Before +const json = Plotly.Plots.graphJson(gd, opts, mode); + +// After +const json = Plotly.Plots.graphJson(gd, opts); +``` + +The **"Share with Plotly Cloud" button (`sendChartToCloud`) is now on by +default** and targets `cloud.plotly.com`. If you don't want the button +visible, opt out: + +```js +Plotly.newPlot(gd, data, layout, { showSendToCloud: false }); +``` + --- ## Removed mapbox traces and subplots @@ -207,6 +235,15 @@ defaulting to `'auto'`. --- +## `splom.axis.matches` default + +`splom` (scatter plot matrix) traces now default `axis.matches` to `true`, so +axes on the same row/column are linked and pan/zoom together. In v3 the +default was `false` (each cell independent). To restore v3 behavior on a +specific splom, set `matches: false` on its axes explicitly. + +--- + ## Sankey layout `@plotly/d3-sankey` was upgraded from 0.7.2 to 0.12.3. The schema is @@ -216,3 +253,23 @@ code change needed unless you had output locked to specific pixel positions. To pin node/link order (for animation or side-by-side comparisons), use the new `sankey.node.sort` and `sankey.link.sort` attributes with `'input'`. Defaults preserve v3-equivalent auto ordering. + +--- + +## MathJax v2 dropped + +Plotly.js now supports **MathJax v3 and v4** for LaTeX rendering. **MathJax +v2 support has been removed** — figures using a v2 bundle will no longer +render math expressions. + +If your page bundles MathJax v2, upgrade to v3 or v4: + +```html + + + + +``` + +The MathJax v3 and v4 syntax is unchanged, so no code changes to the call +sites are needed once the correct bundle is loaded. diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index 89cdbfcda..b976de98d 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -19,376 +19,303 @@ v4](/javascript/guides/migrating-to-v4/). ## Contents -- [Minimum Node.js version](#minimum-nodejs-version) -- [Color library swap (tinycolor2 → color)](#color-library-swap) -- [Chart Studio APIs removed](#chart-studio-apis-removed) -- [Mapbox traces and subplots removed](#mapbox-traces-and-subplots-removed) -- [Country name lookup (country-regex → country-iso-search)](#country-name-lookup) +**New capabilities** + +- [Quiver trace type](#quiver-trace-type) +- [Share with Plotly Cloud](#share-with-plotly-cloud) +- [MathJax v4 support](#mathjax-v4-support) +- [Sankey node and link ordering](#sankey-node-and-link-ordering) +- [Geo subplot zoom limits](#geo-subplot-zoom-limits) - [TypeScript types](#typescript-types) -- [Scattermap icon defaults](#scattermap-icon-defaults) + +**New defaults** + - [Map subplots auto-fit to data](#map-subplots-auto-fit-to-data) - [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default) -- [Geo `fitbounds` framing for antimeridian features](#geo-fitbounds-framing-for-antimeridian-features) -- [Geo subplot zoom limits](#geo-subplot-zoom-limits) -- [Shape legend marker outlines honor `line.dash`](#shape-legend-marker-outlines-honor-line-dash) - [Overlaying axis `tickmode` defaults to `'sync'`](#overlaying-axis-tickmode-defaults-to-sync) -- [Sankey layout algorithm update](#sankey-layout-algorithm-update) -- [Sankey node and link ordering](#sankey-node-and-link-ordering) - ---- - -## Minimum Node.js version +- [`splom.axis.matches` default flipped to `true`](#splomaxismatches-default-flipped-to-true) +- [Shape legend marker outlines honor `line.dash`](#shape-legend-marker-outlines-honor-line-dash) -*Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* +**Behavior and library changes** -Plotly.js now requires Node.js v22 or newer. The previous floor was v18, which -has reached end-of-life. +- [Color library swap](#color-library-swap) +- [Country name lookup](#country-name-lookup) +- [Scattermap icon defaults](#scattermap-icon-defaults) +- [Geo `fitbounds` framing for antimeridian features](#geo-fitbounds-framing-for-antimeridian-features) +- [Sankey layout algorithm update](#sankey-layout-algorithm-update) -This only affects you if: +**Removed** -| Scenario | Why | -|---|---| -| You build Plotly.js from source | Contributors and custom bundles | -| You run Plotly.js in a Node.js runtime | Server-side rendering via jsdom, validation scripts, image export pipelines, etc. | -| You install via `yarn` or `pnpm` | Both enforce `engines` strictly (`npm` prints a warning but installs) | +- [Chart Studio APIs removed](#chart-studio-apis-removed) +- [Mapbox traces and subplots removed](#mapbox-traces-and-subplots-removed) -Consumers who only load the pre-built browser bundle (`plotly.min.js` or a -partial bundle like `plotly-basic.min.js`) are unaffected — the bundle runs in -browsers, not Node. +**Requirements** -If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a warning on -install but won't fail; `yarn` and `pnpm` will refuse to install unless your -environment satisfies `engines.node >= 22.0.0`. +- [Minimum Node.js version](#minimum-nodejs-version) --- -## Color library swap - -*Implemented in [#7536](https://github.com/plotly/plotly.js/pull/7536).* - -In v4, Plotly's internal color processing was switched from -[tinycolor2](https://github.com/bgrins/TinyColor) to -[color](https://github.com/Qix-/color). The new library is actively maintained -and supports modern CSS Color 4 syntax, but a handful of behaviors changed in -the process. +## Quiver trace type -### Color string inputs that no longer work +*Implemented in [#7710](https://github.com/plotly/plotly.js/pull/7710).* -**`hsv()` color strings are no longer accepted.** +Plotly.js now ships a `quiver` trace type for visualizing 2D vector fields as +arrays of arrows. Arrows are placed at `(x, y)` coordinates and drawn with +direction and magnitude from `(u, v)` components. ```js -// Before -{ marker: { color: 'hsv(200, 80%, 80%)' } } - -// After — convert to hsl, hwb, hex, or rgb -{ marker: { color: 'hsl(200, 67%, 47%)' } } +Plotly.newPlot(gd, [{ + type: 'quiver', + x: [0, 1, 2, 0, 1, 2], + y: [0, 0, 0, 1, 1, 1], + u: [1, 0.5, 0, 0.5, 0, -0.5], + v: [0, 0.5, 1, 0.5, 1, 0.5] +}]); ``` -A color in the unsupported format will fall back to the attribute's default. +![Simple 6-arrow quiver with per-arrow coloring](/all_static/images/whats-new-in-v4/quiver_simple.png) -**`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer -accepted.** +### Positioning and sizing -```js -// Before — tinycolor parsed this as 0–1 fractions -'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) +| Attribute | Values | Purpose | +|---|---|---| +| `x`, `y` | numeric arrays | Arrow anchor positions. `x0` + `dx` / `y0` + `dy` shorthand also supported for regular grids. | +| `u`, `v` | numeric arrays | Vector components at each `(x, y)`. | +| `anchor` | `'tail'` (default) / `'tip'` / `'center'` | Which point of the arrow sits at `(x, y)`. | +| `sizemode` | `'scaled'` (default) / `'raw'` | Normalize arrow lengths against the maximum vector length + point density, or draw them at their raw magnitude. | +| `sizeref` | number (default `1`) | Multiplier applied on top of `sizemode`. | +| `anglemode` | `'data'` / `'paper'` | In `'data'`, angles are measured in data coordinates and change with axis zoom or non-uniform scaling; in `'paper'`, angles stay fixed in pixel space. | -// After — the underlying library reads them as integer 0–255 (truncated) -'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) -``` +### Styling -Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` -(or any other supported color string) before passing them to Plotly. +Arrow lines are styled through `marker.line.width` and `marker.line.dash`. +`marker.arrowsize` scales the arrowhead relative to the line width — a value +of `1` (default) gives a head about 3× the line width. -Mixed-format strings where at least one component is `>= 1` (e.g. `rgb(255, -0.0, 0.0)`) continue to render correctly: the new parser treats the `0.0` -components as integer `0`. +### Coloring arrows by a scalar field -**Numeric color inputs are now rejected.** +Pass a `c` array (one value per arrow) plus the usual colorscale attributes +(`marker.colorscale`, `marker.cmin`, `marker.cmax`, `marker.showscale`, +`marker.colorbar`) to color each arrow by an independent scalar. Without `c`, +every arrow uses `marker.color`. ```js -// Before — silently accepted, rendered as near-black -{ marker: { color: 42 } } - -// After — falls back to the attribute default +{ + type: 'quiver', + x: [/* … */], y: [/* … */], + u: [/* … */], v: [/* … */], + marker: { + color: [/* one value per arrow */], + colorscale: 'Viridis', + showscale: true + } +} ``` -If you were relying on numeric color values being coerced, convert them to -color strings before passing them to Plotly. - -### Color computation output changes - -A handful of Plotly's derived colors shift by a few RGB units. Visible places -where output shifts: - -| Where | Example | -|---|---| -| Heatmap auto-contrast text | Cells in the mid-luminance range flip between dark grey and white on colorscales like Viridis or Jet | -| Auto-generated `insidetextfont` color on bars/waterfall | Same threshold shift around mid-luminance backgrounds | -| Sankey default hover color (dark BG) | RGB channels shift by 1 unit per channel vs v3 | +### Selection -Example — the four cells with `z` values 55, 56, and 60 (both occurrences) -shift their text from white in v3 to dark grey in v4 on a Viridis heatmap, -because the underlying color library computes cell luminance with a slightly -different formula. +Quiver supports box and lasso selection through the standard `selected` / +`unselected` marker attributes and appears in the modebar selection buttons +like other cartesian traces. -| Before (v3) | After (v4) | -|---|---| -| ![v3 Viridis heatmap with white text on mid-luminance cells](/all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png) | ![v4 Viridis heatmap with dark text on those cells](/all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png) | +### Example: wind field -### New color formats you can now use +A larger example showing arrows colored by magnitude: -The new library accepts CSS Color 4 syntax that wasn't possible with -tinycolor. All of these are now valid anywhere Plotly accepts a color string: +![Vector wind field visualization with arrows colored by speed](/all_static/images/whats-new-in-v4/quiver_wind.png) -```js -'#ff0000aa' // 8-digit hex with alpha -'#f00a' // 4-digit short hex with alpha -'rgb(255 0 0)' // space-separated rgb -'rgba(255 0 0 / 0.5)' // slash-alpha rgba -'hsl(0 100% 50% / 0.5)' // slash-alpha hsl -'hsla(0, 100%, 50%, 0.5)' // hsla -'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) -``` +--- -See -[test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) -for a working example using each format. +## Share with Plotly Cloud -#### Browser compatibility +*Implemented in [#7802](https://github.com/plotly/plotly.js/pull/7802), +[#7852](https://github.com/plotly/plotly.js/pull/7852), +[#7854](https://github.com/plotly/plotly.js/pull/7854), and +[#7909](https://github.com/plotly/plotly.js/pull/7909).* -All of these are parsed by Plotly in JavaScript and normalized to legacy -`rgb(...)` / `rgba(...)` before being written to the DOM, so the browser never -sees the modern syntax — your figures render the same in any browser that ran -v3. The note below only matters if you also mirror these strings into your own -stylesheets or template literals. +Plotly.js can now share the current figure to +[Plotly Cloud](https://cloud.plotly.com) from a one-click modebar button. +The button posts the figure's data and layout to `cloud.plotly.com` and +returns a shareable URL — the successor to the old Chart Studio upload +flow, but without the Chart Studio-specific config surface (`showLink`, +`sendData`, `showSources`, etc. — those are all gone; see +[Chart Studio APIs removed](#chart-studio-apis-removed)). -Native CSS support: +The button is enabled by default in v4: -| Format | First supported | -|---|---| -| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | -| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | -| `hsla()` | Universal since IE9 | -| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | +![Share with Plotly Cloud button](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png) -`hwb()` is the only format here that won't parse in browsers from ~2020 or -earlier. Everything else is safe in any browser shipped in the last seven -years. +Clicking the button brings up the share dialog: ---- +![Share with Plotly Cloud dialog](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png) -## Chart Studio APIs removed +### Config -*Implemented in [#7812](https://github.com/plotly/plotly.js/pull/7812).* +The button is controlled by two config options: -The legacy "Edit in Chart Studio" link, related config options, and the -streaming token attribute have been removed. The `sendDataToCloud` modebar -button and config option are retained — only the duplicate `editInChartStudio` -button and the on-graph "Edit chart" link are gone. +| Config option | Default | Purpose | +|---|---|---| +| `showSendToCloud` | `true` | Whether the "Share with Plotly Cloud" modebar button is rendered. | +| `plotlyServerURL` | `'cloud.plotly.com'` | The endpoint the button posts to. Override to point at a self-hosted or alternate server. | -### Removed config options +The button's internal name (in `modeBarButtonsToAdd`, event handlers, etc.) +is `sendChartToCloud`. In v3 both `sendChartToCloud` and the alias +`sendDataToCloud` worked; in v4 the alias is removed — code that referred to +the button by the `sendDataToCloud` name needs to be updated. -`Plotly.newPlot(gd, data, layout, config)` no longer accepts: +### Opting out -| Removed | What it did | Replacement | -|---|---|---| -| `showLink` | Drew an "Edit chart" link at the bottom-right of the plot | None — remove the option | -| `linkText` | Text for the `showLink` link | None — remove the option | -| `sendData` | Whether the link uploaded data or just linked to a file | None — remove the option | -| `showSources` | Hook that drew custom source links next to `showLink` | None — remove the option | -| `showEditInChartStudio` | Pencil-icon variant of `sendDataToCloud` | Use `showSendToCloud` | +Hide the button by setting `showSendToCloud: false`: ```js -// Before -Plotly.newPlot(gd, data, layout, { - showLink: true, - linkText: 'View on Plotly', - showEditInChartStudio: true, -}); - -// After Plotly.newPlot(gd, data, layout, { - showSendToCloud: true, + showSendToCloud: false }); ``` -### Removed modebar button - -`editInChartStudio` is no longer a built-in modebar button. If you were adding -it explicitly via `modeBarButtonsToAdd`, switch to `sendDataToCloud`: +Or point the upload at a different host: ```js -// Before -{ modeBarButtonsToAdd: ['editInChartStudio'] } - -// After -{ modeBarButtonsToAdd: ['sendDataToCloud'] } +Plotly.newPlot(gd, data, layout, { + plotlyServerURL: 'https://my-plotly-mirror.example.com' +}); ``` -### Removed trace attribute +### Endpoint status -The undocumented `stream` attribute (`stream.token`, `stream.maxpoints`) has -been removed from every trace type. It was a hook for the Chart Studio -streaming service, which is no longer reachable. If you have figures -containing `stream: { token: '...', maxpoints: N }` in their trace objects, -delete those properties — they're now schema-rejected. +The `cloud.plotly.com` endpoint is **not yet functional at the v4 release**. +The button renders and is wired up, but clicking it does not complete an +upload until the endpoint is deployed. Once it goes live, existing figures +running v4 with the default config will start supporting uploads without +any code change on the caller side. ---- +### History -## Mapbox traces and subplots removed +The upload flow was built out across the Plotly.js 3.7 series +(#7802 / #7852 / #7854), but shipped with `showSendToCloud` defaulting to +`false`, so unless you set the flag manually you never saw the button. +v4 (#7909) flips the default so every new figure exposes it by default — +this is a functional feature reveal, not a new API. -*Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* +--- -The legacy mapbox-gl-js–based traces and subplot type have been removed. The -MapLibre-based `map` family that has shadowed them since v2 is now the only -map implementation. For deeper background on the switch, see [Mapbox to -MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). +## MathJax v4 support -### Removed +*Implemented in [#7898](https://github.com/plotly/plotly.js/pull/7898).* -| Removed | Replacement | -|---|---| -| `scattermapbox` trace | `scattermap` | -| `choroplethmapbox` trace | `choroplethmap` | -| `densitymapbox` trace | `densitymap` | -| `layout.mapbox` subplot (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | -| `layout.mapbox.accesstoken` | None — MapLibre uses open tile providers | -| `mapboxAccessToken` config option | None — see above | -| `plotly-mapbox.min.js` partial bundle | `plotly-map.min.js` | -| Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | -| `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | +Plotly.js now supports **MathJax v3 and v4** for rendering LaTeX in labels, +titles, annotations, and hover text. Support for **MathJax v2 has been +dropped** — figures that rely on a v2 bundle will no longer render their math +expressions. -The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, -`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), so -the migration is usually a rename. +MathJax v3 and v4 share the same rendering syntax, so Plotly no longer needs +version-specific code paths internally. Beyond dropping v2, the internal +`svg_text_utils.js` rewrite makes math rendering somewhat faster. -```js -// Before -{ - data: [{ type: 'scattermapbox', lon: [...], lat: [...] }], - layout: { - mapbox: { - style: 'open-street-map', - center: { lon: 0, lat: 0 }, - zoom: 2, - }, - }, - config: { mapboxAccessToken: 'pk.eyJ1...' }, -} +### What to do -// After -{ - data: [{ type: 'scattermap', lon: [...], lat: [...] }], - layout: { - map: { - style: 'open-street-map', - center: { lon: 0, lat: 0 }, - zoom: 2, - }, - }, - // mapboxAccessToken removed — MapLibre needs no token for the - // built-in styles -} -``` +- Loading MathJax v2 in the page? Upgrade to v3 or v4. The tex-svg build is + the one Plotly integrates with: + ```html + + + + + ``` +- Already on v3? No action required — your math expressions continue to + render. +- On v4 already? No action required either. -### Built-in style values +### Call sites unchanged -Every built-in `style` name that worked on `mapbox` still works on `map`, but -the tiles backing them differ — visual output **will change** even when no -other figure changes: +Plotly's public API for math (using `$…$` in text attributes) is unchanged. +The version negotiation happens inside Plotly at runtime — the correct +rendering path is chosen based on what MathJax exposes. -| Style name | Old (`mapbox`) | New (`map`) | -|---|---|---| -| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | -| `light` | mapbox.com light | Carto Positron | -| `dark` | mapbox.com dark | Carto Dark Matter | -| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | -| `white-bg`, `open-street-map` | unchanged | unchanged | -| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | +--- -The three Stamen styles (`stamen-terrain`, `stamen-toner`, -`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API key. -Users who need them can supply a custom `style` URL. +## Sankey node and link ordering -### Custom style URLs +*Implemented in [#7873](https://github.com/plotly/plotly.js/pull/7873).* -Custom MapLibre / Mapbox-style JSON URLs continue to work. The -`mapbox://styles/mapbox/...` short form is no longer resolved, since it -requires authenticating to mapbox.com. Substitute the full URL of an -equivalent open style, or self-host the style JSON. +Two new attributes let you override the automatic ordering that v4's d3-sankey +algorithm applies: ---- +| Attribute | Default | `'input'` value | +|---|---|---| +| `sankey.node.sort` | `'auto'` | Preserves the vertical order of nodes as given in `node.label`, disabling the layout's default y-axis reordering. | +| `sankey.link.sort` | `'auto'` | Preserves the order in which links are given in `link.source` / `link.target`, disabling the layout's per-node link ordering. | -## Country name lookup +Defaults reproduce v3 behavior, so no code change is needed on upgrade. Use +`'input'` when you want a stable, deterministic ordering across renders — +animation, side-by-side comparisons, or figures where the input order carries +semantic meaning that the layout would otherwise obscure. -*Implemented in [#7856](https://github.com/plotly/plotly.js/pull/7856).* - -`locationmode: 'country names'` on `choropleth` and `scattergeo` traces is now -resolved by [country-iso-search](https://github.com/plotly/country-iso-search) -instead of [country-regex](https://github.com/etpinard/country-regex). The -attribute name, accepted values list, and ISO-3 output are unchanged — the -difference is in *how* a name string is matched to an alpha-3 code. +```js +Plotly.newPlot(gd, [{ + type: 'sankey', + node: { + label: [/* … */], + sort: 'input' + }, + link: { + source: [/* … */], + target: [/* … */], + value: [/* … */], + sort: 'input' + } +}]); +``` -The old library walked a table of country-specific regular expressions and -returned the first match. That made it lenient (substring matches worked) but -ambiguity-prone — strings like `'Republic of'` could resolve to whichever -entry's regex hit first. The new library does a sanitized exact lookup against -a curated alias table, which is stricter about ambiguous input but accepts -many more legitimate forms. +The `sort` attribute is not honored on circular Sankey diagrams — those +continue to use `d3-sankey-circular`, which has no equivalent hook. -### Previously recognized names that no longer work +Same data, same code — only the `sort` value differs: -Strings that only matched because of overly broad regex fragments now fall -back to the unrecognized-name log message and the location is skipped. In -practice this hits inputs that weren't really country names — partial phrases, -generic descriptors, or strings containing a country name as a substring of -something else (e.g. `'Republic of Foo'`, `'Not Iran'`). If you were relying -on a non-canonical form, switch to the country's name, an alias, or the ISO-3 -/ ISO-2 code. +| `sort: 'auto'` (default) | `sort: 'input'` | +|---|---| +| ![auto reorders sources to reduce crossings](/all_static/images/whats-new-in-v4/sankey_sort_auto.png) | ![input preserves the given order, crossings and all](/all_static/images/whats-new-in-v4/sankey_sort_input.png) | -### Names and forms that now resolve +In this figure the source nodes are given as `[A, B, C, D]` and paired +one-to-one with targets `[Z, Y, X, W]` — a maximally-crossed input. `'auto'` +flips the source column to `D, C, B, A` so the primary flows run horizontally; +`'input'` leaves both columns in the given order and preserves every crossing. -The alias table is larger and the input is normalized before lookup, so a -number of forms that previously failed now work: +--- -```js -// All resolve to 'FRA' -'France' -'FR' // ISO 3166-1 alpha-2 -250 // UN M49 numeric (number or string) -'\u{1F1EB}\u{1F1F7}' // flag emoji +## Geo subplot zoom limits -// Historical / native / punctuated names -'Burma' // → 'MMR' -'Türkiye' // → 'TUR' (diacritics stripped) -'Cote d\'Ivoire' // → 'CIV' (apostrophes ignored) -'St. Kitts and Nevis' // → 'KNA' ('St.' expands to 'Saint') -'The Gambia' // → 'GMB' (leading 'The ' dropped) -``` +*Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* -Matching is case-insensitive. Sanitization also collapses internal whitespace, -drops `.` `()` `,`, maps `&` → `and`, and turns `-` / `–` / `—` into spaces — -so cosmetic punctuation differences in your input data no longer block a -match. +Geo subplots accept two new attributes for clamping interactive zoom: -### Disputed-territory codes are retained +| Attribute | Default | Effect | +|---|---|---| +| `layout.geo.projection.minscale` | `0` | Lower bound on zoom, expressed as a multiplier of `projection.scale`. `0` means no lower bound. | +| `layout.geo.projection.maxscale` | `null` | Upper bound on zoom, expressed as a multiplier of `projection.scale`. `null` means no upper bound. | -The user-assigned alpha-3 codes Plotly historically recognized for disputed -regions still work: +```js +Plotly.newPlot(gd, [/* … */], { + geo: { + projection: { + scale: 1, + minscale: 0.5, // can't zoom out past 50% of base + maxscale: 4, // can't zoom in past 400% of base + }, + }, +}); +``` -| Code | Region | -|---|---| -| `XAC` | Aksai Chin | -| `XAP` | Arunachal Pradesh | -| `XBT` | Bir Tawil | -| `XHT` | Halaib Triangle | -| `XJK` | Jammu and Kashmir | +The defaults preserve v3 behavior — figures that don't set these attributes +are unaffected. -These are layered on top of the standard ISO 3166-1 records via -[src/lib/custom_country_codes.ts](https://github.com/plotly/plotly.js/blob/master/src/lib/custom_country_codes.ts). -Whether a feature for them appears on the rendered map still depends on the -topojson resolution in use. +One init-time wrinkle: if `projection.scale` falls outside `[minscale, +maxscale]`, Plotly now dispatches a synthetic zoom event on first plot to +clamp it back into range. That emits a `plotly_relayout` event that v3 +wouldn't have fired. If you have a listener that distinguishes user-driven +zooms from programmatic ones, make sure it tolerates a single extra event at +startup for figures whose initial `projection.scale` is outside the configured +bounds. --- @@ -473,58 +400,6 @@ compiling. New code should prefer `TraceType`. --- -## Scattermap icon defaults - -*Implemented in [#7825](https://github.com/plotly/plotly.js/pull/7825).* - -If you used `scattermap` or `scattermapbox` in v3, three rendering details -have changed by the time you land on `scattermap` in v4: - -### Marker icons now respect `marker.color` - -`marker.color` on a scattermap trace is now applied to the icon by setting -`icon-color`. - -| Before (v3) | After (v4) | -|---|---| -| ![v3 scattermap icons uncolored](/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v3.png) | ![v4 scattermap icons tinted red](/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v4.png) | - -### Maki icon set updated to v8 (via jsDelivr) - -The icon CDN and version have changed: - -| Version | URL | -|---|---| -| v3 | `https://unpkg.com/maki@2.1.0/icons/.svg` | -| v4 | `https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/.svg` | - -A handful of icon names removed between Maki 2.1 and 8.2 will now silently -fail to load (HTTP 404). If you were using one of the dropped icons, swap it -for the nearest Maki 8 equivalent (see [Maki 8 icon -list](https://labs.mapbox.com/maki-icons/)). - -### Legend swatch always renders as a circle - -`scattermap` legend swatches now always draw a circle, regardless of -`marker.symbol`. In v3 the swatch went through the same code path as cartesian -traces, which only understands the [Plotly-supported symbol -names](https://github.com/plotly/plotly.js/blob/master/src/components/drawing/symbol_defs.js). -On map traces, that produced inconsistent output: symbols with names that -don't overlap the Plotly set (Maki-only names like `'airport'`, `'cafe'`) -rendered as filled circles, while other symbols (`'square'`, `'star'`, etc.) -rendered as broken/empty paths in the legend even though they draw correctly -on the map. The v4 circle fallback makes the swatch consistent across every -scattermap trace. - -| Before (v3) | After (v4) | -|---|---| -| ![v3 scattermap legend inconsistent](/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v3.png) | ![v4 scattermap legend all circles](/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v4.png) | - -If you were styling the legend swatch path directly based on `marker.symbol`, -that selector will now always match a circle path on map traces. - ---- - ## Map subplots auto-fit to data *Implemented in [#7884](https://github.com/plotly/plotly.js/pull/7884).* @@ -547,7 +422,7 @@ Plotly.newPlot(gd, [{ | Before (v3) | After (v4) | |---|---| -| ![v3 map with world view](/all_static/images/whats-new-in-v4/migration_map_autofit_v3.png) | ![v4 map framed on cities](/all_static/images/whats-new-in-v4/migration_map_autofit_v4.png) | +| ![v3 map with world view](/all_static/images/whats-new-in-v4/map_autofit_v3.png) | ![v4 map framed on cities](/all_static/images/whats-new-in-v4/map_autofit_v4.png) | Auto-fitting runs on the initial render and again on data-only updates (`Plotly.restyle` of `lon`/`lat`, `Plotly.addTraces`, `Plotly.deleteTraces`) @@ -641,7 +516,7 @@ Plotly.newPlot(gd, [{ | Before (v3) | After (v4) | |---|---| -| ![v3 geo world view](/all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png) | ![v4 geo framed on Canada+Mexico](/all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png) | +| ![v3 geo world view](/all_static/images/whats-new-in-v4/geo_autofit_v3.png) | ![v4 geo framed on Canada+Mexico](/all_static/images/whats-new-in-v4/geo_autofit_v4.png) | ### Disabling auto-fitting @@ -715,99 +590,96 @@ reset is the fitted view. --- -## Geo `fitbounds` framing for antimeridian features - -*Implemented in [#7891](https://github.com/plotly/plotly.js/pull/7891).* +## Overlaying axis `tickmode` defaults to `'sync'` -`layout.geo.fitbounds: 'locations'` (and `'geojson'`) now correctly frames -choropleth and scattergeo location traces containing features that cross the -±180° antimeridian — Russia, Fiji, Antarctica, New Zealand, and the Aleutian -Islands portion of Alaska. In v3 these were mis-framed because the underlying -bounding-box computation (`@turf/bbox`) reported a bogus whole-globe span -(`[-180°, 180°]`) for any such feature, and the fit zoomed the map out to -match. In v4, `computeBbox` uses `d3-geo.geoBounds`' widest-gap longitude -algorithm on the feature's vertices and returns the compact crossing range -(with `east > 180°` when the range wraps). +*Implemented in [#7684](https://github.com/plotly/plotly.js/pull/7684).* -Because v4 also flips the `fitbounds` default from `false` to `'locations'` -(see [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default)), -figures that never set `fitbounds` explicitly now participate in auto-fit too -— so this antimeridian fix reaches many more figures than it would have as a -standalone change. +An axis that overlays another axis (`layout.xaxis2.overlaying: 'x'`, +`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to `'sync'` +instead of `'auto'`. The overlay axis draws tick marks and gridlines at the +same positions as its base axis, computing labels to match — rather than +picking its own auto-fit tick positions. -### Which figures shift +In v3 the two axes drew independent auto-tick grids, producing staggered +gridlines that were hard to read and left no visual association between a +gridline and a specific axis. Sync eliminates that overlap. -A figure sees a visible change when **both** of the following hold: +```js +Plotly.newPlot(gd, [ + { y: [1, 3, 2], name: 'A' }, + { y: [100, 300, 200], name: 'B', yaxis: 'y2' } +], { + yaxis2: { overlaying: 'y', side: 'right' } + // v3: y2 picks its own ticks, producing a staggered grid + // v4: y2 places ticks at y's tick positions, with y2-range labels +}); +``` -| Condition | Detail | +| Before (v3) | After (v4) | |---|---| -| `layout.geo.fitbounds` is active | Either explicitly set to `'locations'` / `'geojson'`, or left at the v4 default (see the opt-out list in the auto-fit-default section above). | -| The figure contains an antimeridian-crossing feature | A `choropleth` or `scattergeo` trace with `locations` where at least one location resolves to a feature that crosses ±180°. | +| ![v3 staggered overlay ticks](/all_static/images/whats-new-in-v4/tickmode_v3.png) | ![v4 sync'd overlay ticks](/all_static/images/whats-new-in-v4/tickmode_v4.png) | -Figures that opt out of auto-fit (`fitbounds: false`, an explicit view -attribute, or one of the projections listed as skipping auto-fit), or that -don't include an antimeridian-crossing feature, render identically to v3 as -far as this fix is concerned. +### Exception: categorical / multicategory base axes -### Example +When the overlaid (base) axis is `type: 'category'` or `'multicategory'`, +`tickmode` continues to default to `'auto'` on the overlaying axis. Sync'ing +tick positions to category slots is almost never the intent. + +### Opting out + +Set `tickmode: 'auto'` (or any other explicit value) on the overlaying axis to +restore v3 behavior: ```js -Plotly.newPlot(gd, [{ - type: 'choropleth', - locations: ['RUS'], - z: [1], - colorscale: [[0, '#c33'], [1, '#c33']], - showscale: false -}], { - geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }, - width: 700, - height: 500 -}); -// v3: fits to a bogus [-180°, 180°] span — Russia is a small red strip at -// the top of the whole world. -// v4: fits tightly to Russia's actual longitudinal extent (~19° through -// ~190°, unwrapped across the antimeridian). +{ yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } ``` -| Before (v3) | After (v4) | -|---|---| -| ![v3 Russia mis-framed with empty space](/all_static/images/whats-new-in-v4/migration_antimeridian_v3.png) | ![v4 Russia tightly framed](/all_static/images/whats-new-in-v4/migration_antimeridian_v4.png) | +### Incidental bug fix + +`showexponent`, `showtickprefix`, and `showticksuffix` values of `'first'` and +`'last'` were previously ignored on axes rendered with `tickmode: 'sync'`. Any +workaround for that (e.g., forcing `'all'` on overlay axes) is no longer +needed in v4. --- -## Geo subplot zoom limits +## `splom.axis.matches` default flipped to `true` -*Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* +*Implemented in [#7843](https://github.com/plotly/plotly.js/pull/7843).* -Geo subplots accept two new attributes for clamping interactive zoom: +`splom` (scatter plot matrix) traces now default `axis.matches` to `true`. +That means axes on the same row are linked, and axes in the same column are +linked, so pan and zoom propagate through the matrix as a group. In v3 the +default was `false`, so each cell had its own independent axes. -| Attribute | Default | Effect | -|---|---|---| -| `layout.geo.projection.minscale` | `0` | Lower bound on zoom, expressed as a multiplier of `projection.scale`. `0` means no lower bound. | -| `layout.geo.projection.maxscale` | `null` | Upper bound on zoom, expressed as a multiplier of `projection.scale`. `null` means no upper bound. | +Plotly Express has always set `matches: true` on generated splom plots, so +this brings the raw Plotly.js default in line with what Express users +already saw. ```js -Plotly.newPlot(gd, [/* … */], { - geo: { - projection: { - scale: 1, - minscale: 0.5, // can't zoom out past 50% of base - maxscale: 4, // can't zoom in past 400% of base - }, - }, -}); +Plotly.newPlot(gd, [{ + type: 'splom', + dimensions: [/* … */] +}]); +// v3: pan/zoom on one cell only affects that cell's axes +// v4: pan/zoom on one cell also pans/zooms every cell in the same row and column ``` -The defaults preserve v3 behavior — figures that don't set these attributes -are unaffected. +### Opting out -One init-time wrinkle: if `projection.scale` falls outside `[minscale, -maxscale]`, Plotly now dispatches a synthetic zoom event on first plot to -clamp it back into range. That emits a `plotly_relayout` event that v3 -wouldn't have fired. If you have a listener that distinguishes user-driven -zooms from programmatic ones, make sure it tolerates a single extra event at -startup for figures whose initial `projection.scale` is outside the configured -bounds. +Set `axis.matches: false` explicitly to restore v3 behavior: + +```js +{ + type: 'splom', + dimensions: [/* … */], + xaxes: [{ matches: false }, /* … */], + yaxes: [{ matches: false }, /* … */] +} +``` + +Or set `matches: false` per axis via `layout.xaxis`/`layout.yaxis` if you +want to unlink specific axes only. --- @@ -838,60 +710,307 @@ Plotly.newPlot(gd, [], { | Before (v3) | After (v4) | |---|---| -| ![v3 shape legend outlines solid](/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v3.png) | ![v4 shape legend outlines dashed](/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v4.png) | +| ![v3 shape legend outlines solid](/all_static/images/whats-new-in-v4/shape_legend_swatch_v3.png) | ![v4 shape legend outlines dashed](/all_static/images/whats-new-in-v4/shape_legend_swatch_v4.png) | --- -## Overlaying axis `tickmode` defaults to `'sync'` +## Color library swap -*Implemented in [#7684](https://github.com/plotly/plotly.js/pull/7684).* +*Implemented in [#7536](https://github.com/plotly/plotly.js/pull/7536).* -An axis that overlays another axis (`layout.xaxis2.overlaying: 'x'`, -`layout.yaxis2.overlaying: 'y'`, etc.) now defaults its `tickmode` to `'sync'` -instead of `'auto'`. The overlay axis draws tick marks and gridlines at the -same positions as its base axis, computing labels to match — rather than -picking its own auto-fit tick positions. +In v4, Plotly's internal color processing was switched from +[tinycolor2](https://github.com/bgrins/TinyColor) to +[color](https://github.com/Qix-/color). The new library is actively maintained +and supports modern CSS Color 4 syntax, but a handful of behaviors changed in +the process. -In v3 the two axes drew independent auto-tick grids, producing staggered -gridlines that were hard to read and left no visual association between a -gridline and a specific axis. Sync eliminates that overlap. +### Color string inputs that no longer work + +**`hsv()` color strings are no longer accepted.** ```js -Plotly.newPlot(gd, [ - { y: [1, 3, 2], name: 'A' }, - { y: [100, 300, 200], name: 'B', yaxis: 'y2' } -], { - yaxis2: { overlaying: 'y', side: 'right' } - // v3: y2 picks its own ticks, producing a staggered grid - // v4: y2 places ticks at y's tick positions, with y2-range labels -}); +// Before +{ marker: { color: 'hsv(200, 80%, 80%)' } } + +// After — convert to hsl, hwb, hex, or rgb +{ marker: { color: 'hsl(200, 67%, 47%)' } } +``` + +A color in the unsupported format will fall back to the attribute's default. + +**`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer +accepted.** + +```js +// Before — tinycolor parsed this as 0–1 fractions +'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) + +// After — the underlying library reads them as integer 0–255 (truncated) +'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) +``` + +Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` +(or any other supported color string) before passing them to Plotly. + +Mixed-format strings where at least one component is `>= 1` (e.g. `rgb(255, +0.0, 0.0)`) continue to render correctly: the new parser treats the `0.0` +components as integer `0`. + +**Numeric color inputs are now rejected.** + +```js +// Before — silently accepted, rendered as near-black +{ marker: { color: 42 } } + +// After — falls back to the attribute default ``` +If you were relying on numeric color values being coerced, convert them to +color strings before passing them to Plotly. + +### Color computation output changes + +A handful of Plotly's derived colors shift by a few RGB units. Visible places +where output shifts: + +| Where | Example | +|---|---| +| Heatmap auto-contrast text | Cells in the mid-luminance range flip between dark grey and white on colorscales like Viridis or Jet | +| Auto-generated `insidetextfont` color on bars/waterfall | Same threshold shift around mid-luminance backgrounds | +| Sankey default hover color (dark BG) | RGB channels shift by 1 unit per channel vs v3 | + +Example — the four cells with `z` values 55, 56, and 60 (both occurrences) +shift their text from white in v3 to dark grey in v4 on a Viridis heatmap, +because the underlying color library computes cell luminance with a slightly +different formula. + | Before (v3) | After (v4) | |---|---| -| ![v3 staggered overlay ticks](/all_static/images/whats-new-in-v4/migration_tickmode_v3.png) | ![v4 sync'd overlay ticks](/all_static/images/whats-new-in-v4/migration_tickmode_v4.png) | +| ![v3 Viridis heatmap with white text on mid-luminance cells](/all_static/images/whats-new-in-v4/color_heatmap_v3.png) | ![v4 Viridis heatmap with dark text on those cells](/all_static/images/whats-new-in-v4/color_heatmap_v4.png) | -### Exception: categorical / multicategory base axes +### New color formats you can now use -When the overlaid (base) axis is `type: 'category'` or `'multicategory'`, -`tickmode` continues to default to `'auto'` on the overlaying axis. Sync'ing -tick positions to category slots is almost never the intent. +The new library accepts CSS Color 4 syntax that wasn't possible with +tinycolor. All of these are now valid anywhere Plotly accepts a color string: -### Opting out +```js +'#ff0000aa' // 8-digit hex with alpha +'#f00a' // 4-digit short hex with alpha +'rgb(255 0 0)' // space-separated rgb +'rgba(255 0 0 / 0.5)' // slash-alpha rgba +'hsl(0 100% 50% / 0.5)' // slash-alpha hsl +'hsla(0, 100%, 50%, 0.5)' // hsla +'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) +``` -Set `tickmode: 'auto'` (or any other explicit value) on the overlaying axis to -restore v3 behavior: +See +[test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) +for a working example using each format. + +#### Browser compatibility + +All of these are parsed by Plotly in JavaScript and normalized to legacy +`rgb(...)` / `rgba(...)` before being written to the DOM, so the browser never +sees the modern syntax — your figures render the same in any browser that ran +v3. The note below only matters if you also mirror these strings into your own +stylesheets or template literals. + +Native CSS support: + +| Format | First supported | +|---|---| +| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | +| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | +| `hsla()` | Universal since IE9 | +| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | + +`hwb()` is the only format here that won't parse in browsers from ~2020 or +earlier. Everything else is safe in any browser shipped in the last seven +years. + +--- + +## Country name lookup + +*Implemented in [#7856](https://github.com/plotly/plotly.js/pull/7856).* + +`locationmode: 'country names'` on `choropleth` and `scattergeo` traces is now +resolved by [country-iso-search](https://github.com/plotly/country-iso-search) +instead of [country-regex](https://github.com/etpinard/country-regex). The +attribute name, accepted values list, and ISO-3 output are unchanged — the +difference is in *how* a name string is matched to an alpha-3 code. + +The old library walked a table of country-specific regular expressions and +returned the first match. That made it lenient (substring matches worked) but +ambiguity-prone — strings like `'Republic of'` could resolve to whichever +entry's regex hit first. The new library does a sanitized exact lookup against +a curated alias table, which is stricter about ambiguous input but accepts +many more legitimate forms. + +### Previously recognized names that no longer work + +Strings that only matched because of overly broad regex fragments now fall +back to the unrecognized-name log message and the location is skipped. In +practice this hits inputs that weren't really country names — partial phrases, +generic descriptors, or strings containing a country name as a substring of +something else (e.g. `'Republic of Foo'`, `'Not Iran'`). If you were relying +on a non-canonical form, switch to the country's name, an alias, or the ISO-3 +/ ISO-2 code. + +### Names and forms that now resolve + +The alias table is larger and the input is normalized before lookup, so a +number of forms that previously failed now work: ```js -{ yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } +// All resolve to 'FRA' +'France' +'FR' // ISO 3166-1 alpha-2 +250 // UN M49 numeric (number or string) +'\u{1F1EB}\u{1F1F7}' // flag emoji + +// Historical / native / punctuated names +'Burma' // → 'MMR' +'Türkiye' // → 'TUR' (diacritics stripped) +'Cote d\'Ivoire' // → 'CIV' (apostrophes ignored) +'St. Kitts and Nevis' // → 'KNA' ('St.' expands to 'Saint') +'The Gambia' // → 'GMB' (leading 'The ' dropped) ``` -### Incidental bug fix +Matching is case-insensitive. Sanitization also collapses internal whitespace, +drops `.` `()` `,`, maps `&` → `and`, and turns `-` / `–` / `—` into spaces — +so cosmetic punctuation differences in your input data no longer block a +match. -`showexponent`, `showtickprefix`, and `showticksuffix` values of `'first'` and -`'last'` were previously ignored on axes rendered with `tickmode: 'sync'`. Any -workaround for that (e.g., forcing `'all'` on overlay axes) is no longer -needed in v4. +### Disputed-territory codes are retained + +The user-assigned alpha-3 codes Plotly historically recognized for disputed +regions still work: + +| Code | Region | +|---|---| +| `XAC` | Aksai Chin | +| `XAP` | Arunachal Pradesh | +| `XBT` | Bir Tawil | +| `XHT` | Halaib Triangle | +| `XJK` | Jammu and Kashmir | + +These are layered on top of the standard ISO 3166-1 records via +[src/lib/custom_country_codes.ts](https://github.com/plotly/plotly.js/blob/master/src/lib/custom_country_codes.ts). +Whether a feature for them appears on the rendered map still depends on the +topojson resolution in use. + +--- + +## Scattermap icon defaults + +*Implemented in [#7825](https://github.com/plotly/plotly.js/pull/7825).* + +If you used `scattermap` or `scattermapbox` in v3, three rendering details +have changed by the time you land on `scattermap` in v4: + +### Marker icons now respect `marker.color` + +`marker.color` on a scattermap trace is now applied to the icon by setting +`icon-color`. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap icons uncolored](/all_static/images/whats-new-in-v4/scattermap_iconcolor_v3.png) | ![v4 scattermap icons tinted red](/all_static/images/whats-new-in-v4/scattermap_iconcolor_v4.png) | + +### Maki icon set updated to v8 (via jsDelivr) + +The icon CDN and version have changed: + +| Version | URL | +|---|---| +| v3 | `https://unpkg.com/maki@2.1.0/icons/.svg` | +| v4 | `https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/.svg` | + +A handful of icon names removed between Maki 2.1 and 8.2 will now silently +fail to load (HTTP 404). If you were using one of the dropped icons, swap it +for the nearest Maki 8 equivalent (see [Maki 8 icon +list](https://labs.mapbox.com/maki-icons/)). + +### Legend swatch always renders as a circle + +`scattermap` legend swatches now always draw a circle, regardless of +`marker.symbol`. In v3 the swatch went through the same code path as cartesian +traces, which only understands the [Plotly-supported symbol +names](https://github.com/plotly/plotly.js/blob/master/src/components/drawing/symbol_defs.js). +On map traces, that produced inconsistent output: symbols with names that +don't overlap the Plotly set (Maki-only names like `'airport'`, `'cafe'`) +rendered as filled circles, while other symbols (`'square'`, `'star'`, etc.) +rendered as broken/empty paths in the legend even though they draw correctly +on the map. The v4 circle fallback makes the swatch consistent across every +scattermap trace. + +| Before (v3) | After (v4) | +|---|---| +| ![v3 scattermap legend inconsistent](/all_static/images/whats-new-in-v4/scattermap_legendsymbol_v3.png) | ![v4 scattermap legend all circles](/all_static/images/whats-new-in-v4/scattermap_legendsymbol_v4.png) | + +If you were styling the legend swatch path directly based on `marker.symbol`, +that selector will now always match a circle path on map traces. + +--- + +## Geo `fitbounds` framing for antimeridian features + +*Implemented in [#7891](https://github.com/plotly/plotly.js/pull/7891).* + +`layout.geo.fitbounds: 'locations'` (and `'geojson'`) now correctly frames +choropleth and scattergeo location traces containing features that cross the +±180° antimeridian — Russia, Fiji, Antarctica, New Zealand, and the Aleutian +Islands portion of Alaska. In v3 these were mis-framed because the underlying +bounding-box computation (`@turf/bbox`) reported a bogus whole-globe span +(`[-180°, 180°]`) for any such feature, and the fit zoomed the map out to +match. In v4, `computeBbox` uses `d3-geo.geoBounds`' widest-gap longitude +algorithm on the feature's vertices and returns the compact crossing range +(with `east > 180°` when the range wraps). + +Because v4 also flips the `fitbounds` default from `false` to `'locations'` +(see [Geo subplots auto-fit by default](#geo-subplots-auto-fit-by-default)), +figures that never set `fitbounds` explicitly now participate in auto-fit too +— so this antimeridian fix reaches many more figures than it would have as a +standalone change. + +### Which figures shift + +A figure sees a visible change when **both** of the following hold: + +| Condition | Detail | +|---|---| +| `layout.geo.fitbounds` is active | Either explicitly set to `'locations'` / `'geojson'`, or left at the v4 default (see the opt-out list in the auto-fit-default section above). | +| The figure contains an antimeridian-crossing feature | A `choropleth` or `scattergeo` trace with `locations` where at least one location resolves to a feature that crosses ±180°. | + +Figures that opt out of auto-fit (`fitbounds: false`, an explicit view +attribute, or one of the projections listed as skipping auto-fit), or that +don't include an antimeridian-crossing feature, render identically to v3 as +far as this fix is concerned. + +### Example + +```js +Plotly.newPlot(gd, [{ + type: 'choropleth', + locations: ['RUS'], + z: [1], + colorscale: [[0, '#c33'], [1, '#c33']], + showscale: false +}], { + geo: { fitbounds: 'locations', projection: { type: 'equirectangular' } }, + width: 700, + height: 500 +}); +// v3: fits to a bogus [-180°, 180°] span — Russia is a small red strip at +// the top of the whole world. +// v4: fits tightly to Russia's actual longitudinal extent (~19° through +// ~190°, unwrapped across the antimeridian). +``` + +| Before (v3) | After (v4) | +|---|---| +| ![v3 Russia mis-framed with empty space](/all_static/images/whats-new-in-v4/antimeridian_v3.png) | ![v4 Russia tightly framed](/all_static/images/whats-new-in-v4/antimeridian_v4.png) | --- @@ -913,53 +1032,207 @@ pixels. | Before (v3) | After (v4) | |---|---| -| ![v3 sankey with crossing links](/all_static/images/whats-new-in-v4/migration_sankey_v3.png) | ![v4 sankey with rewritten layout](/all_static/images/whats-new-in-v4/migration_sankey_v4.png) | +| ![v3 sankey with crossing links](/all_static/images/whats-new-in-v4/sankey_v3.png) | ![v4 sankey with rewritten layout](/all_static/images/whats-new-in-v4/sankey_v4.png) | --- -## Sankey node and link ordering +## Chart Studio APIs removed -*Implemented in [#7873](https://github.com/plotly/plotly.js/pull/7873).* +*Implemented in [#7812](https://github.com/plotly/plotly.js/pull/7812).* -Two new attributes let you override the automatic ordering that v4's d3-sankey -algorithm applies: +The legacy "Edit in Chart Studio" link, related config options, and the +streaming token attribute have been removed. The `sendChartToCloud` modebar +button (aliased as `sendDataToCloud` in v3, now targeting Plotly Cloud in v4; +see [Share with Plotly Cloud](#share-with-plotly-cloud)) and its +`showSendToCloud` config option are retained — only the duplicate +`editInChartStudio` button and the on-graph "Edit chart" link are gone. -| Attribute | Default | `'input'` value | +### Removed config options + +`Plotly.newPlot(gd, data, layout, config)` no longer accepts: + +| Removed | What it did | Replacement | |---|---|---| -| `sankey.node.sort` | `'auto'` | Preserves the vertical order of nodes as given in `node.label`, disabling the layout's default y-axis reordering. | -| `sankey.link.sort` | `'auto'` | Preserves the order in which links are given in `link.source` / `link.target`, disabling the layout's per-node link ordering. | +| `showLink` | Drew an "Edit chart" link at the bottom-right of the plot | None — remove the option | +| `linkText` | Text for the `showLink` link | None — remove the option | +| `sendData` | Whether the link uploaded data or just linked to a file | None — remove the option | +| `showSources` | Hook that drew custom source links next to `showLink` | None — remove the option | +| `showEditInChartStudio` | Pencil-icon variant of `sendChartToCloud` | Use `showSendToCloud` | -Defaults reproduce v3 behavior, so no code change is needed on upgrade. Use -`'input'` when you want a stable, deterministic ordering across renders — -animation, side-by-side comparisons, or figures where the input order carries -semantic meaning that the layout would otherwise obscure. +```js +// Before +Plotly.newPlot(gd, data, layout, { + showLink: true, + linkText: 'View on Plotly', + showEditInChartStudio: true, +}); + +// After +Plotly.newPlot(gd, data, layout, { + showSendToCloud: true, +}); +``` + +### Removed modebar button + +`editInChartStudio` is no longer a built-in modebar button. If you were adding +it explicitly via `modeBarButtonsToAdd`, switch to `sendChartToCloud`. Note +that the v3 alias `sendDataToCloud` was **also** removed in v4, so code that +referred to the button by that name needs to be updated too: ```js -Plotly.newPlot(gd, [{ - type: 'sankey', - node: { - label: [/* … */], - sort: 'input' +// Before (v3 — both worked) +{ modeBarButtonsToAdd: ['editInChartStudio'] } +{ modeBarButtonsToAdd: ['sendDataToCloud'] } + +// After (v4) +{ modeBarButtonsToAdd: ['sendChartToCloud'] } +``` + +### Removed trace attribute + +The undocumented `stream` attribute (`stream.token`, `stream.maxpoints`) has +been removed from every trace type. It was a hook for the Chart Studio +streaming service, which is no longer reachable. If you have figures +containing `stream: { token: '...', maxpoints: N }` in their trace objects, +delete those properties — they're now schema-rejected. + +### Removed data-source (`*src`) attributes + +*See [#7829](https://github.com/plotly/plotly.js/pull/7829).* + +Every schema attribute ending in `src` (`xsrc`, `ysrc`, `textsrc`, +`marker.colorsrc`, ...) has been removed, along with `layout.hidesources`. +These existed only to interoperate with Chart Studio's data-source +references, which is no longer reachable. If your figures contain any +`*src` attributes or `hidesources`, delete them — they're now schema-rejected. + +### `Plots.graphJson()` signature simplified + +*See [#7829](https://github.com/plotly/plotly.js/pull/7829).* + +`Plotly.Plots.graphJson()` previously accepted a `mode` argument that was +Chart Studio–specific. It has been dropped: + +```js +// Before +const json = Plotly.Plots.graphJson(gd, opts, mode); + +// After +const json = Plotly.Plots.graphJson(gd, opts); +``` + +If you were passing the third argument (typically `'keepdata'` or +`'keepall'`), remove it — that behavior was only meaningful when uploading +to Chart Studio. + +--- + +## Mapbox traces and subplots removed + +*Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* + +The legacy mapbox-gl-js–based traces and subplot type have been removed. The +MapLibre-based `map` family that has shadowed them since v2 is now the only +map implementation. For deeper background on the switch, see [Mapbox to +MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). + +### Removed + +| Removed | Replacement | +|---|---| +| `scattermapbox` trace | `scattermap` | +| `choroplethmapbox` trace | `choroplethmap` | +| `densitymapbox` trace | `densitymap` | +| `layout.mapbox` subplot (and `mapbox2`, `mapbox3`, …) | `layout.map` (and `map2`, `map3`, …) | +| `layout.mapbox.accesstoken` | None — MapLibre uses open tile providers | +| `mapboxAccessToken` config option | None — see above | +| `plotly-mapbox.min.js` partial bundle | `plotly-map.min.js` | +| Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | +| `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | + +The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, +`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), so +the migration is usually a rename. + +```js +// Before +{ + data: [{ type: 'scattermapbox', lon: [...], lat: [...] }], + layout: { + mapbox: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, }, - link: { - source: [/* … */], - target: [/* … */], - value: [/* … */], - sort: 'input' - } -}]); + config: { mapboxAccessToken: 'pk.eyJ1...' }, +} + +// After +{ + data: [{ type: 'scattermap', lon: [...], lat: [...] }], + layout: { + map: { + style: 'open-street-map', + center: { lon: 0, lat: 0 }, + zoom: 2, + }, + }, + // mapboxAccessToken removed — MapLibre needs no token for the + // built-in styles +} ``` -The `sort` attribute is not honored on circular Sankey diagrams — those -continue to use `d3-sankey-circular`, which has no equivalent hook. +### Built-in style values -Same data, same code — only the `sort` value differs: +Every built-in `style` name that worked on `mapbox` still works on `map`, but +the tiles backing them differ — visual output **will change** even when no +other figure changes: -| `sort: 'auto'` (default) | `sort: 'input'` | +| Style name | Old (`mapbox`) | New (`map`) | +|---|---|---| +| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | +| `light` | mapbox.com light | Carto Positron | +| `dark` | mapbox.com dark | Carto Dark Matter | +| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | +| `white-bg`, `open-street-map` | unchanged | unchanged | +| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | + +The three Stamen styles (`stamen-terrain`, `stamen-toner`, +`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API key. +Users who need them can supply a custom `style` URL. + +### Custom style URLs + +Custom MapLibre / Mapbox-style JSON URLs continue to work. The +`mapbox://styles/mapbox/...` short form is no longer resolved, since it +requires authenticating to mapbox.com. Substitute the full URL of an +equivalent open style, or self-host the style JSON. + +--- + +## Minimum Node.js version + +*Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* + +Plotly.js now requires Node.js v22 or newer. The previous floor was v18, which +has reached end-of-life. + +This only affects you if: + +| Scenario | Why | |---|---| -| ![auto reorders sources to reduce crossings](/all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png) | ![input preserves the given order, crossings and all](/all_static/images/whats-new-in-v4/migration_sankey_sort_input.png) | +| You build Plotly.js from source | Contributors and custom bundles | +| You run Plotly.js in a Node.js runtime | Server-side rendering via jsdom, validation scripts, image export pipelines, etc. | +| You install via `yarn` or `pnpm` | Both enforce `engines` strictly (`npm` prints a warning but installs) | -In this figure the source nodes are given as `[A, B, C, D]` and paired -one-to-one with targets `[Z, Y, X, W]` — a maximally-crossed input. `'auto'` -flips the source column to `D, C, B, A` so the primary flows run horizontally; -`'input'` leaves both columns in the given order and preserves every crossing. +Consumers who only load the pre-built browser bundle (`plotly.min.js` or a +partial bundle like `plotly-basic.min.js`) are unaffected — the bundle runs in +browsers, not Node. + +If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a warning on +install but won't fail; `yarn` and `pnpm` will refuse to install unless your +environment satisfies `engines.node >= 22.0.0`. + +--- From 2ac82b0c7df3333d76e40ef8fab10f77655b4b4e Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Mon, 27 Jul 2026 15:05:09 -0600 Subject: [PATCH 12/25] Add section about Sankey direction, fix some incorrect language --- .../2026-07-17-migrating-to-v4.md | 2 +- .../2026-07-20-whats-new-in-v4.md | 90 +++++++++++++----- .../sankey_direction_forward.png | Bin 0 -> 30374 bytes .../sankey_direction_reversed.png | Bin 0 -> 29783 bytes 4 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 all_static/images/whats-new-in-v4/sankey_direction_forward.png create mode 100644 all_static/images/whats-new-in-v4/sankey_direction_reversed.png diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 96e9b2dda..5e1c7b378 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -203,7 +203,7 @@ Figures that already supply view attributes render unchanged. | Change | Detail | |---|---| -| Marker icons now respect `marker.color` | To keep icons in their original artwork color, set `marker.color: 'white'`. | +| Marker icons now respect `marker.color` | To maintain the v3 behavior, pass `marker.color: 'black'` | | Maki icons load from `@mapbox/maki@8.2.0` via jsDelivr | A handful of icon names dropped between Maki 2.1 and 8.2 will 404 — swap to the nearest Maki 8 equivalent. | | Legend swatches always draw a circle | Regardless of `marker.symbol`. Selectors that styled the swatch path based on symbol name will now match a circle on map traces. | diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index b976de98d..ea727a221 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -25,6 +25,7 @@ v4](/javascript/guides/migrating-to-v4/). - [Share with Plotly Cloud](#share-with-plotly-cloud) - [MathJax v4 support](#mathjax-v4-support) - [Sankey node and link ordering](#sankey-node-and-link-ordering) +- [Sankey flow direction](#sankey-flow-direction) - [Geo subplot zoom limits](#geo-subplot-zoom-limits) - [TypeScript types](#typescript-types) @@ -94,10 +95,12 @@ of `1` (default) gives a head about 3× the line width. ### Coloring arrows by a scalar field -Pass a `c` array (one value per arrow) plus the usual colorscale attributes -(`marker.colorscale`, `marker.cmin`, `marker.cmax`, `marker.showscale`, -`marker.colorbar`) to color each arrow by an independent scalar. Without `c`, -every arrow uses `marker.color`. +Pass `marker.color` as an array (one value per arrow) together with the usual +colorscale attributes (`marker.colorscale`, `marker.cmin`, `marker.cmax`, +`marker.showscale`, `marker.colorbar`) to color each arrow by that scalar. If +you enable a colorscale but don't supply a `marker.color` array, arrows are +colored by their vector magnitude `|(u, v)|` instead. A single (non-array) +`marker.color` paints every arrow that one color. ```js { @@ -283,6 +286,56 @@ flips the source column to `D, C, B, A` so the primary flows run horizontally; --- +## Sankey flow direction + +*Implemented in [#7870](https://github.com/plotly/plotly.js/pull/7870).* + +A new `sankey.direction` attribute controls which way flows run along the +`orientation` axis, so you can reverse a diagram without manually reversing +your `link.source` / `link.target` data. + +| Attribute | Default | `'reversed'` value | +|---|---|---| +| `sankey.direction` | `'forward'` | Flips the flow along the `orientation` axis. | + +`direction` is orthogonal to the existing `orientation` attribute (`'h'` / +`'v'`), giving four combinations: + +| `orientation` | `direction` | Result | +|---|---|---| +| `'h'` (default) | `'forward'` (default) | Sources on the left, targets on the right | +| `'h'` | `'reversed'` | Sources on the right, targets on the left | +| `'v'` | `'forward'` | Sources on top, targets on the bottom | +| `'v'` | `'reversed'` | Sources on the bottom, targets on the top | + +The default (`'forward'`) reproduces v3 behavior, so no code change is needed +on upgrade. + +```js +Plotly.newPlot(gd, [{ + type: 'sankey', + orientation: 'h', + direction: 'reversed', // sources on the right, targets on the left + node: { + label: [/* … */] + }, + link: { + source: [/* … */], + target: [/* … */], + value: [/* … */] + } +}]); +``` + +Node labels stay upright and readable in every combination — only the flow +geometry mirrors. + +| `direction: 'forward'` (default) | `direction: 'reversed'` | +|---|---| +| ![forward flow with sources on the left](/all_static/images/whats-new-in-v4/sankey_direction_forward.png) | ![reversed flow with sources on the right](/all_static/images/whats-new-in-v4/sankey_direction_reversed.png) | + +--- + ## Geo subplot zoom limits *Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* @@ -745,16 +798,19 @@ accepted.** // Before — tinycolor parsed this as 0–1 fractions 'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) -// After — the underlying library reads them as integer 0–255 (truncated) +// After — the underlying library reads them on the 0–255 scale and rounds +// to the nearest integer 'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) ``` Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` (or any other supported color string) before passing them to Plotly. -Mixed-format strings where at least one component is `>= 1` (e.g. `rgb(255, -0.0, 0.0)`) continue to render correctly: the new parser treats the `0.0` -components as integer `0`. +Every numeric component is read literally on the 0–255 scale and rounded — +there is no 0–1 fraction detection. A string like `rgb(255, 0.0, 0.0)` still +renders correctly because its `0.0` components round to `0`, but any genuinely +fractional component rounds to the nearest integer rather than scaling to +0–255 (e.g. `rgb(200, 0.5, 0.5)` → `rgb(200, 1, 1)`). **Numeric color inputs are now rejected.** @@ -812,21 +868,7 @@ for a working example using each format. All of these are parsed by Plotly in JavaScript and normalized to legacy `rgb(...)` / `rgba(...)` before being written to the DOM, so the browser never sees the modern syntax — your figures render the same in any browser that ran -v3. The note below only matters if you also mirror these strings into your own -stylesheets or template literals. - -Native CSS support: - -| Format | First supported | -|---|---| -| `#rrggbbaa`, `#rgba` | Chrome 62 (2017), Firefox 49 (2016), Safari 9.1 (2016) | -| `rgb(r g b)`, `rgb(r g b / a)`, `hsl(h s l / a)` (space + slash-alpha) | Chrome 65 (2018), Firefox 52 (2017), Safari 12.1 (Mar 2019) | -| `hsla()` | Universal since IE9 | -| `hwb()` | Chrome 101 (Apr 2022), Firefox 96 (Jan 2022), Safari 15 (Sep 2021) | - -`hwb()` is the only format here that won't parse in browsers from ~2020 or -earlier. Everything else is safe in any browser shipped in the last seven -years. +v3. --- @@ -912,7 +954,7 @@ have changed by the time you land on `scattermap` in v4: ### Marker icons now respect `marker.color` `marker.color` on a scattermap trace is now applied to the icon by setting -`icon-color`. +`icon-color`. In v3, the icons were always black. | Before (v3) | After (v4) | |---|---| diff --git a/all_static/images/whats-new-in-v4/sankey_direction_forward.png b/all_static/images/whats-new-in-v4/sankey_direction_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e9ae390def360d1310e5287860e5b26676c673 GIT binary patch literal 30374 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 z Date: Wed, 29 Jul 2026 14:09:26 -0600 Subject: [PATCH 13/25] Address PR feedback --- .../2026-07-17-migrating-to-v4.md | 102 +++------ .../2026-07-20-whats-new-in-v4.md | 204 +++++++----------- 2 files changed, 104 insertions(+), 202 deletions(-) diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 5e1c7b378..2402a5c7a 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -15,8 +15,8 @@ thumbnail: thumbnail/mixed.jpg # Migrating to Plotly.js v4 This is a quick checklist of code changes needed to update existing Plotly.js -v3 charts for v4. For full detail on every new feature and breaking change -(with images, background, and edge cases), see [What's New in Plotly.js +v3 charts for v4. For full detail on every new feature and breaking change, +see [What's New in Plotly.js v4](/javascript/guides/whats-new-in-v4/). Most figures will render without changes. The items below call out where @@ -52,14 +52,21 @@ Consumers of the pre-built browser bundle are unaffected. ## Removed color inputs -Three color-input formats no longer work — invalid inputs fall back to the -attribute's default: +Plotly.js colors now conform thoroughly to the [CSS standard](https://www.w3.org/TR/css-color-4/). As a result +three color-input formats no longer behave as before. `hsv()` and bare-hex +inputs are now invalid and fall back to the attribute's default; fractional +`rgb()` is no longer rescaled and now renders near-black instead of the +intended color: | Input | What to do | |---|---| -| `hsv()` strings | Convert to `hsl()`, `hwb()`, hex, or `rgb()` | +| `hsv()` / `hsva()` strings | Convert to `hsl()`, `hwb()`, hex, or `rgb()` | | `rgb()` / `rgba()` strings with 0–1 decimal fractions | Convert `'rgb(0.5, 0.5, 0.5)'` to `'rgb(128, 128, 128)'` (or any supported string form) | -| Numeric color values (e.g. `color: 42`) | Convert to a color string | +| Hex strings without a leading `#` (e.g. `'fff'`, `'F00'`) | Add the `#` (e.g. `'#fff'`, `'#F00'`) | + +Note that these formats only affect *string* colors. Numeric color arrays +used for color mapping (e.g. `marker.color: [1, 2, 3, 4]` paired with a +`colorscale`) are unchanged and remain valid. Auto-computed contrast colors (heatmap text, `insidetextfont` on bars/waterfall, sankey hover on dark BG) may also shift by a few RGB units @@ -76,11 +83,7 @@ Config options removed from `Plotly.newPlot(gd, data, layout, config)`: | `showLink`, `linkText`, `sendData`, `showSources` | None — remove them | | `showEditInChartStudio` | `showSendToCloud` | -The `editInChartStudio` modebar button is gone — switch to `sendChartToCloud`. -The v3 alias `sendDataToCloud` for that button was also removed, so update -any `modeBarButtonsToAdd: ['sendDataToCloud']` calls to use -`'sendChartToCloud'`. The undocumented `stream: { token, maxpoints }` trace -attribute is removed and now schema-rejected. +The `editInChartStudio` modebar button is gone — switch to `showSendToCloud`. ```js // Before @@ -96,25 +99,8 @@ Plotly.newPlot(gd, data, layout, { }); ``` -Also removed: every schema attribute ending in `src` (`xsrc`, `ysrc`, -`textsrc`, `marker.colorsrc`, …) plus `layout.hidesources`. These were -Chart Studio data-reference hooks; delete them from any figures where they -still appear. - -The `Plots.graphJson()` signature is simplified — drop the third `mode` -argument if you were passing one: - -```js -// Before -const json = Plotly.Plots.graphJson(gd, opts, mode); - -// After -const json = Plotly.Plots.graphJson(gd, opts); -``` - The **"Share with Plotly Cloud" button (`sendChartToCloud`) is now on by -default** and targets `cloud.plotly.com`. If you don't want the button -visible, opt out: +default**. If you don't want the button visible, it can be turned off as follows: ```js Plotly.newPlot(gd, data, layout, { showSendToCloud: false }); @@ -124,8 +110,8 @@ Plotly.newPlot(gd, data, layout, { showSendToCloud: false }); ## Removed mapbox traces and subplots -The legacy `mapbox`-based traces and subplot type are gone. Rename to the -MapLibre-based `map` family. For deeper background on the switch, see [Mapbox +The legacy Mapbox-based traces and subplot type are gone. Rename to the +MapLibre-based `map` family. For more information, see [Mapbox to MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). | Removed | Replacement | @@ -158,34 +144,34 @@ The attribute shape is unchanged — usually a straight rename works: ``` Built-in style names still work but use different tile providers (Carto, -ArcGIS, OpenStreetMap) — visual output will shift. Stamen styles +ArcGIS, OpenStreetMap), so the visual appearance will change. Stamen styles (`stamen-terrain`, `-toner`, `-watercolor`) are no longer built in — they now require a Stadia API key. The `mapbox://styles/mapbox/...` short-form URL is -no longer resolved. +no longer supported. --- ## Country name lookup -`locationmode: 'country names'` on `choropleth` and `scattergeo` traces now -uses a stricter matcher. Strings that only matched previously via broad regex -fragments (e.g. `'Republic of'`, `'Not Iran'`) no longer resolve — locations -are skipped. Switch to a canonical country name, an alias, or an ISO-3 / ISO-2 -code. +`locationmode: 'country names'` (on `choropleth` and `scattergeo` traces) now +uses a different library for looking up names. The vast majority of country +names are handled exactly the same with the new library; a small number of +legacy entries have been removed. If a name isn't matching in a plot, switch +to a [canonical country name, an alias, or an ISO-3 / ISO-2 code](https://github.com/plotly/country-iso-search/blob/878c3a8a140aade85e109088d3e8edbc34fcda9d/src/countries.ts). --- ## Auto-fitting on `map` and `geo` subplots -Both subplot types now auto-fit their initial view to fit trace data. +Both subplot types now auto-fit their initial view to trace data. **For `map` subplots** (`scattermap`, `densitymap`): set `map.fitbounds: -false`, or set `map.center` / `map.zoom` explicitly, to opt out. +false`, or set `map.center` / `map.zoom` explicitly, to disable auto-fit. **For `geo` subplots** (`scattergeo`, `choropleth`): `layout.geo.fitbounds` now defaults to `'locations'` (previously `false`). Set `fitbounds: false`, or set any view attribute (`center`, `projection.rotation`, `projection.scale`, -`lonaxis.range`, `lataxis.range`), to opt out. +`lonaxis.range`, `lataxis.range`), to disable auto-fit. Figures that already supply view attributes render unchanged. @@ -204,17 +190,8 @@ Figures that already supply view attributes render unchanged. | Change | Detail | |---|---| | Marker icons now respect `marker.color` | To maintain the v3 behavior, pass `marker.color: 'black'` | -| Maki icons load from `@mapbox/maki@8.2.0` via jsDelivr | A handful of icon names dropped between Maki 2.1 and 8.2 will 404 — swap to the nearest Maki 8 equivalent. | -| Legend swatches always draw a circle | Regardless of `marker.symbol`. Selectors that styled the swatch path based on symbol name will now match a circle on map traces. | - ---- - -## Shape legend `line.dash` - -Filled-shape legend markers (`type: 'rect'`, `'circle'`, or filled paths with -`showlegend: true`) now draw their outline using the shape's `line.dash` -value, matching the on-plot shape. No code change needed unless you had output -locked to the v3 solid-outline behavior. +| Maki icons updated from from v2.1 to 8.2 | A handful of icon names were removed between v2.1 and v8.2. See the [list](https://labs.mapbox.com/maki-icons/) of available icons. | +| Legend swatches always render | A bug prevented some legend swatches from rendering for some scattermap traces. The bug has been fixed. | --- @@ -230,9 +207,6 @@ independent-grid behavior: { yaxis2: { overlaying: 'y', side: 'right', tickmode: 'auto' } } ``` -Categorical / multicategory base axes are exempt — overlays over them keep -defaulting to `'auto'`. - --- ## `splom.axis.matches` default @@ -246,23 +220,14 @@ specific splom, set `matches: false` on its axes explicitly. ## Sankey layout -`@plotly/d3-sankey` was upgraded from 0.7.2 to 0.12.3. The schema is -unchanged, but node y-positions and link paths shift for the same figure. No -code change needed unless you had output locked to specific pixel positions. - -To pin node/link order (for animation or side-by-side comparisons), use the -new `sankey.node.sort` and `sankey.link.sort` attributes with `'input'`. -Defaults preserve v3-equivalent auto ordering. +`@plotly/d3-sankey` was upgraded from 0.7.2 to 0.12.3. Node y-positions and link paths may change slightly. --- -## MathJax v2 dropped +## MathJax v2 support removed Plotly.js now supports **MathJax v3 and v4** for LaTeX rendering. **MathJax -v2 support has been removed** — figures using a v2 bundle will no longer -render math expressions. - -If your page bundles MathJax v2, upgrade to v3 or v4: +v2 support has been removed**. If your page bundles MathJax v2, upgrade to v3 or v4: ```html @@ -270,6 +235,3 @@ If your page bundles MathJax v2, upgrade to v3 or v4: ``` - -The MathJax v3 and v4 syntax is unchanged, so no code changes to the call -sites are needed once the correct bundle is loaded. diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index ea727a221..276a34151 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -80,7 +80,7 @@ Plotly.newPlot(gd, [{ | Attribute | Values | Purpose | |---|---|---| -| `x`, `y` | numeric arrays | Arrow anchor positions. `x0` + `dx` / `y0` + `dy` shorthand also supported for regular grids. | +| `x`, `y` | numeric arrays | Arrow anchor positions. | | `u`, `v` | numeric arrays | Vector components at each `(x, y)`. | | `anchor` | `'tail'` (default) / `'tip'` / `'center'` | Which point of the arrow sits at `(x, y)`. | | `sizemode` | `'scaled'` (default) / `'raw'` | Normalize arrow lengths against the maximum vector length + point density, or draw them at their raw magnitude. | @@ -136,13 +136,7 @@ A larger example showing arrows colored by magnitude: [#7854](https://github.com/plotly/plotly.js/pull/7854), and [#7909](https://github.com/plotly/plotly.js/pull/7909).* -Plotly.js can now share the current figure to -[Plotly Cloud](https://cloud.plotly.com) from a one-click modebar button. -The button posts the figure's data and layout to `cloud.plotly.com` and -returns a shareable URL — the successor to the old Chart Studio upload -flow, but without the Chart Studio-specific config surface (`showLink`, -`sendData`, `showSources`, etc. — those are all gone; see -[Chart Studio APIs removed](#chart-studio-apis-removed)). +Plotly.js now offers a modebar button which sends the current chart to [Plotly Cloud](https://cloud.plotly.com) to generate a shareable link. Sharing the chart opens Plotly Cloud in a new tab, where you can copy the sharing link and adjust visibility settings. A Plotly Cloud account is required. The button is enabled by default in v4: @@ -161,13 +155,6 @@ The button is controlled by two config options: | `showSendToCloud` | `true` | Whether the "Share with Plotly Cloud" modebar button is rendered. | | `plotlyServerURL` | `'cloud.plotly.com'` | The endpoint the button posts to. Override to point at a self-hosted or alternate server. | -The button's internal name (in `modeBarButtonsToAdd`, event handlers, etc.) -is `sendChartToCloud`. In v3 both `sendChartToCloud` and the alias -`sendDataToCloud` worked; in v4 the alias is removed — code that referred to -the button by the `sendDataToCloud` name needs to be updated. - -### Opting out - Hide the button by setting `showSendToCloud: false`: ```js @@ -176,30 +163,6 @@ Plotly.newPlot(gd, data, layout, { }); ``` -Or point the upload at a different host: - -```js -Plotly.newPlot(gd, data, layout, { - plotlyServerURL: 'https://my-plotly-mirror.example.com' -}); -``` - -### Endpoint status - -The `cloud.plotly.com` endpoint is **not yet functional at the v4 release**. -The button renders and is wired up, but clicking it does not complete an -upload until the endpoint is deployed. Once it goes live, existing figures -running v4 with the default config will start supporting uploads without -any code change on the caller side. - -### History - -The upload flow was built out across the Plotly.js 3.7 series -(#7802 / #7852 / #7854), but shipped with `showSendToCloud` defaulting to -`false`, so unless you set the flag manually you never saw the button. -v4 (#7909) flips the default so every new figure exposes it by default — -this is a functional feature reveal, not a new API. - --- ## MathJax v4 support @@ -207,33 +170,24 @@ this is a functional feature reveal, not a new API. *Implemented in [#7898](https://github.com/plotly/plotly.js/pull/7898).* Plotly.js now supports **MathJax v3 and v4** for rendering LaTeX in labels, -titles, annotations, and hover text. Support for **MathJax v2 has been -dropped** — figures that rely on a v2 bundle will no longer render their math -expressions. - -MathJax v3 and v4 share the same rendering syntax, so Plotly no longer needs -version-specific code paths internally. Beyond dropping v2, the internal -`svg_text_utils.js` rewrite makes math rendering somewhat faster. +titles, and annotations. Support for **MathJax v2 has been dropped**. ### What to do -- Loading MathJax v2 in the page? Upgrade to v3 or v4. The tex-svg build is - the one Plotly integrates with: - ```html - - - - - ``` -- Already on v3? No action required — your math expressions continue to - render. -- On v4 already? No action required either. +Loading MathJax v2 in the page? Upgrade to v3 or v4. Plotly math rendering +uses the tex-svg component (`tex-svg.js`): +```html + + + + +``` -### Call sites unchanged +Note that the `?config=TeX-AMS-MML_SVG` URL suffix (used with MathJax v2) is +no longer required starting with MathJax v3. Configuration is specified by linking +directly to the desired JavaScript file, which is `tex-svg.js` for Plotly.js. -Plotly's public API for math (using `$…$` in text attributes) is unchanged. -The version negotiation happens inside Plotly at runtime — the correct -rendering path is chosen based on what MathJax exposes. +Already on v3? No action required — your math expressions continue to render. --- @@ -792,37 +746,42 @@ the process. A color in the unsupported format will fall back to the attribute's default. **`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer -accepted.** +rescaled.** In v3, Plotly detected all-fractional `rgb()` components and +rescaled them from 0–1 to 0–255 before parsing; v4 removed that step and reads +every component literally on the 0–255 scale, so the same string now renders +near-black. ```js -// Before — tinycolor parsed this as 0–1 fractions +// Before — v3 rescaled 0–1 fractions to 0–255 'rgb(0.5, 0.5, 0.5)' // → rgb(128, 128, 128) -// After — the underlying library reads them on the 0–255 scale and rounds -// to the nearest integer +// After — read literally on the 0–255 scale and rounded to the nearest integer 'rgb(0.5, 0.5, 0.5)' // → rgb(1, 1, 1) ``` Convert any inputs of the form `rgb(0.5, 0.5, 0.5)` to `rgb(128, 128, 128)` (or any other supported color string) before passing them to Plotly. -Every numeric component is read literally on the 0–255 scale and rounded — -there is no 0–1 fraction detection. A string like `rgb(255, 0.0, 0.0)` still -renders correctly because its `0.0` components round to `0`, but any genuinely -fractional component rounds to the nearest integer rather than scaling to -0–255 (e.g. `rgb(200, 0.5, 0.5)` → `rgb(200, 1, 1)`). +Rescaling only ever applied when *all* of `r`, `g`, `b` were fractional. A +string like `rgb(255, 0.0, 0.0)` was never rescaled and still renders +correctly (its `0.0` components round to `0`); a partly-fractional string such +as `rgb(200, 0.5, 0.5)` now rounds each component to the nearest integer → +`rgb(200, 1, 1)`. -**Numeric color inputs are now rejected.** +**Hex strings without a leading `#` are no longer accepted.** ```js -// Before — silently accepted, rendered as near-black -{ marker: { color: 42 } } +// Before — tinycolor accepted bare hex +{ marker: { color: 'fff' } } -// After — falls back to the attribute default +// After — invalid and falls back to the attribute default; add the '#' +{ marker: { color: '#fff' } } ``` -If you were relying on numeric color values being coerced, convert them to -color strings before passing them to Plotly. +These changes affect *string* colors only. Numeric color arrays used for color +mapping (e.g. `marker.color: [1, 2, 3, 4]` with a `colorscale`) are unchanged +and remain valid — those values are mapped through the colorscale, not parsed +as literal colors. ### Color computation output changes @@ -846,19 +805,22 @@ different formula. ### New color formats you can now use -The new library accepts CSS Color 4 syntax that wasn't possible with -tinycolor. All of these are now valid anywhere Plotly accepts a color string: +The new library adds CSS Color 4 syntax that tinycolor didn't fully support — +notably slash-separated alpha and the `hwb()` color space: ```js -'#ff0000aa' // 8-digit hex with alpha -'#f00a' // 4-digit short hex with alpha -'rgb(255 0 0)' // space-separated rgb -'rgba(255 0 0 / 0.5)' // slash-alpha rgba -'hsl(0 100% 50% / 0.5)' // slash-alpha hsl -'hsla(0, 100%, 50%, 0.5)' // hsla -'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) +'rgba(255 0 0 / 0.5)' // space-separated rgb with slash alpha +'hsl(0 100% 50% / 0.5)' // slash alpha on hsl (v3 accepted the syntax but dropped the alpha) +'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) ``` +The following additional formats were already supported: + +- 8-digit hex (`#ff0000aa`) +- 4-digit short hex (`#f00a`), +- Space-separated `rgb(255 0 0)` +- Comma-form `hsla(0, 100%, 50%, 0.5)`. + See [test/image/mocks/color_syntax_formats.json](https://github.com/plotly/plotly.js/blob/master/test/image/mocks/color_syntax_formats.json) for a working example using each format. @@ -1149,34 +1111,15 @@ These existed only to interoperate with Chart Studio's data-source references, which is no longer reachable. If your figures contain any `*src` attributes or `hidesources`, delete them — they're now schema-rejected. -### `Plots.graphJson()` signature simplified - -*See [#7829](https://github.com/plotly/plotly.js/pull/7829).* - -`Plotly.Plots.graphJson()` previously accepted a `mode` argument that was -Chart Studio–specific. It has been dropped: - -```js -// Before -const json = Plotly.Plots.graphJson(gd, opts, mode); - -// After -const json = Plotly.Plots.graphJson(gd, opts); -``` - -If you were passing the third argument (typically `'keepdata'` or -`'keepall'`), remove it — that behavior was only meaningful when uploading -to Chart Studio. - --- ## Mapbox traces and subplots removed *Implemented in [#7860](https://github.com/plotly/plotly.js/pull/7860).* -The legacy mapbox-gl-js–based traces and subplot type have been removed. The -MapLibre-based `map` family that has shadowed them since v2 is now the only -map implementation. For deeper background on the switch, see [Mapbox to +The legacy Mapbox–based traces and subplot type have been removed. The +equivalent MapLibre-based `map` traces (first released in Plotly.js v3) are +now the only map implementation. For more information, see [Mapbox to MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). ### Removed @@ -1193,9 +1136,8 @@ MapLibre migration](https://plotly.com/python/mapbox-to-maplibre/). | Modebar buttons `zoomInMapbox`, `zoomOutMapbox`, `resetViewMapbox` | `zoomInMap`, `zoomOutMap`, `resetViewMap` | | `scrollZoom` flag value `'mapbox'` (e.g. `scrollZoom: 'mapbox+cartesian'`) | `'map'` | -The schema for `map` mirrors `mapbox` attribute-for-attribute (`domain`, -`style`, `center`, `zoom`, `bearing`, `pitch`, `bounds`, `layers[...]`), so -the migration is usually a rename. +The attributes for `map` traces are identical to those of `mapbox` traces, so +updating the trace name is all that's required to migrate. ```js // Before @@ -1221,36 +1163,35 @@ the migration is usually a rename. zoom: 2, }, }, - // mapboxAccessToken removed — MapLibre needs no token for the - // built-in styles + // mapboxAccessToken no longer required } ``` ### Built-in style values -Every built-in `style` name that worked on `mapbox` still works on `map`, but -the tiles backing them differ — visual output **will change** even when no -other figure changes: +Every built-in `style` value supported for `mapbox` traces works for `map` traces as well, +but the tile providers for some styles have changed. In those cases, the visual appearance +of the map will differ: | Style name | Old (`mapbox`) | New (`map`) | |---|---|---| -| `basic`, `streets`, `outdoors` | mapbox.com vector tiles (required token) | Carto Voyager | -| `light` | mapbox.com light | Carto Positron | -| `dark` | mapbox.com dark | Carto Dark Matter | -| `satellite`, `satellite-streets` | mapbox.com satellite | ArcGIS World Imagery | -| `white-bg`, `open-street-map` | unchanged | unchanged | -| `carto-*`, `carto-*-nolabels` | n/a (already open) | unchanged | - -The three Stamen styles (`stamen-terrain`, `stamen-toner`, -`stamen-watercolor`) are gone — Stamen tiles now require a Stadia API key. -Users who need them can supply a custom `style` URL. +| `'basic'`, `'streets'`, `'outdoors'` | mapbox.com 'basic' / 'streets' / 'outdoors' tiles | [Carto](https://github.com/cartodb/basemap-styles/) Voyager | +| `'light'` | mapbox.com 'light' tiles | [Carto](https://github.com/cartodb/basemap-styles/) Positron | +| `'dark'` | mapbox.com 'dark' tiles | [Carto](https://github.com/cartodb/basemap-styles/) Dark Matter | +| `'satellite'`, `satellite-streets` | mapbox.com satellite tiles | [ArcGIS World Imagery](https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer) | +| `'white-bg'` | solid white background | unchanged | +| `'open-street-map'` | [OpenStreetMap](https://www.openstreetmap.org) tiles | unchanged | +| `carto-*`, `carto-*-nolabels` | Corresponding [Carto](https://github.com/cartodb/basemap-styles/) tiles | unchanged | + +The three Stamen style values (`stamen-terrain`, `stamen-toner`, `stamen-watercolor`) +are no longer supported, since Stamen tiles require a Stadia API key. It is still possible to use +Stamen tiles, or any other third-party tiles, by passing the URL of a JSON style definition to `style`. ### Custom style URLs -Custom MapLibre / Mapbox-style JSON URLs continue to work. The -`mapbox://styles/mapbox/...` short form is no longer resolved, since it -requires authenticating to mapbox.com. Substitute the full URL of an -equivalent open style, or self-host the style JSON. +Setting `style` to the URL of a MapLibre / Mapbox JSON style definition is still supported. +Custom Mapbox URLs of the form `mapbox://styles/mapbox/...` are no longer supported, since they +require authenticating to mapbox.com. --- @@ -1258,7 +1199,7 @@ equivalent open style, or self-host the style JSON. *Implemented in [#7861](https://github.com/plotly/plotly.js/pull/7861).* -Plotly.js now requires Node.js v22 or newer. The previous floor was v18, which +Plotly.js now requires Node.js v22 or newer. The previous minimum was v18, which has reached end-of-life. This only affects you if: @@ -1270,8 +1211,7 @@ This only affects you if: | You install via `yarn` or `pnpm` | Both enforce `engines` strictly (`npm` prints a warning but installs) | Consumers who only load the pre-built browser bundle (`plotly.min.js` or a -partial bundle like `plotly-basic.min.js`) are unaffected — the bundle runs in -browsers, not Node. +partial bundle like `plotly-basic.min.js`) are unaffected. If you're on Node 18 or 20, upgrade to 22 LTS. `npm` will print a warning on install but won't fail; `yarn` and `pnpm` will refuse to install unless your From 887b37d16e16deae696459f3ff02dce7bf46413a Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 09:45:44 -0600 Subject: [PATCH 14/25] Clarify colors, add links to new pages --- .../2026-07-17-migrating-to-v4.md | 10 +++--- .../2026-07-20-whats-new-in-v4.md | 32 +++++++++++++++---- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 2402a5c7a..22f76179e 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -53,7 +53,7 @@ Consumers of the pre-built browser bundle are unaffected. ## Removed color inputs Plotly.js colors now conform thoroughly to the [CSS standard](https://www.w3.org/TR/css-color-4/). As a result -three color-input formats no longer behave as before. `hsv()` and bare-hex +the following color-input formats no longer behave as before. `hsv()` and bare-hex inputs are now invalid and fall back to the attribute's default; fractional `rgb()` is no longer rescaled and now renders near-black instead of the intended color: @@ -61,12 +61,14 @@ intended color: | Input | What to do | |---|---| | `hsv()` / `hsva()` strings | Convert to `hsl()`, `hwb()`, hex, or `rgb()` | +| `hsl()` / `hsla()` strings without percent units on saturation and lightness (e.g. `'hsl(0, 100, 40)'`, `'hsl(0 100 40)'`) | Add the units (e.g. `'hsl(0, 100%, 40%)'`) | | `rgb()` / `rgba()` strings with 0–1 decimal fractions | Convert `'rgb(0.5, 0.5, 0.5)'` to `'rgb(128, 128, 128)'` (or any supported string form) | | Hex strings without a leading `#` (e.g. `'fff'`, `'F00'`) | Add the `#` (e.g. `'#fff'`, `'#F00'`) | Note that these formats only affect *string* colors. Numeric color arrays used for color mapping (e.g. `marker.color: [1, 2, 3, 4]` paired with a -`colorscale`) are unchanged and remain valid. +`colorscale`) are unchanged and remain valid. For the full list of formats +Plotly.js accepts, see [Specifying Colors](/javascript/colors/). Auto-computed contrast colors (heatmap text, `insidetextfont` on bars/waterfall, sankey hover on dark BG) may also shift by a few RGB units @@ -190,8 +192,8 @@ Figures that already supply view attributes render unchanged. | Change | Detail | |---|---| | Marker icons now respect `marker.color` | To maintain the v3 behavior, pass `marker.color: 'black'` | -| Maki icons updated from from v2.1 to 8.2 | A handful of icon names were removed between v2.1 and v8.2. See the [list](https://labs.mapbox.com/maki-icons/) of available icons. | -| Legend swatches always render | A bug prevented some legend swatches from rendering for some scattermap traces. The bug has been fixed. | +| Maki icons updated from v2.1 to 8.2 | A handful of icon names were removed between v2.1 and v8.2. See the [list](https://labs.mapbox.com/maki-icons/) of available icons. | +| Legend swatches always draw a circle | Regardless of `marker.symbol`. In v3, symbols whose names overlap the Plotly set (`'square'`, `'star'`, …) drew broken or empty swatch paths; those now render as circles, consistent with every other scattermap trace. | --- diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index 276a34151..2f7a9292a 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -62,7 +62,8 @@ v4](/javascript/guides/migrating-to-v4/). Plotly.js now ships a `quiver` trace type for visualizing 2D vector fields as arrays of arrows. Arrows are placed at `(x, y)` coordinates and drawn with -direction and magnitude from `(u, v)` components. +direction and magnitude from `(u, v)` components. See +[Quiver Plots](/javascript/quiver-plots/) for runnable examples. ```js Plotly.newPlot(gd, [{ @@ -196,7 +197,8 @@ Already on v3? No action required — your math expressions continue to render. *Implemented in [#7873](https://github.com/plotly/plotly.js/pull/7873).* Two new attributes let you override the automatic ordering that v4's d3-sankey -algorithm applies: +algorithm applies (see [Node and Link +Ordering](/javascript/sankey-diagram/#node-and-link-ordering)): | Attribute | Default | `'input'` value | |---|---|---| @@ -246,7 +248,8 @@ flips the source column to `D, C, B, A` so the primary flows run horizontally; A new `sankey.direction` attribute controls which way flows run along the `orientation` axis, so you can reverse a diagram without manually reversing -your `link.source` / `link.target` data. +your `link.source` / `link.target` data (see [Flow +Direction](/javascript/sankey-diagram/#flow-direction)). | Attribute | Default | `'reversed'` value | |---|---|---| @@ -294,7 +297,8 @@ geometry mirrors. *Implemented in [#7371](https://github.com/plotly/plotly.js/pull/7371).* -Geo subplots accept two new attributes for clamping interactive zoom: +Geo subplots accept two new attributes for clamping interactive zoom (see +[Limiting Zoom on Outline Maps](/javascript/map-view/#limiting-zoom-on-outline-maps)): | Attribute | Default | Effect | |---|---|---| @@ -333,7 +337,9 @@ bounds. Plotly.js now ships its own TypeScript type definitions. `package.json` points `"types"` at `lib/index.d.ts`, so the types are picked up automatically — no -separate `@types/*` install is needed. +separate `@types/*` install is needed. See +[Using Plotly.js with TypeScript](/javascript/guides/typescript/) for a +task-oriented walkthrough. ### Importing @@ -745,6 +751,17 @@ the process. A color in the unsupported format will fall back to the attribute's default. +**`hsl()` / `hsla()` strings need percent units on saturation and lightness.** +A color in the unsupported format will fall back to the attribute's default. + +```js +// Before +{ marker: { color: 'hsl(0, 100, 40)' } } + +// After — add the percent units +{ marker: { color: 'hsl(0, 100%, 40%)' } } +``` + **`rgb()` / `rgba()` strings with 0–1 decimal fractions are no longer rescaled.** In v3, Plotly detected all-fractional `rgb()` components and rescaled them from 0–1 to 0–255 before parsing; v4 removed that step and reads @@ -811,9 +828,12 @@ notably slash-separated alpha and the `hwb()` color space: ```js 'rgba(255 0 0 / 0.5)' // space-separated rgb with slash alpha 'hsl(0 100% 50% / 0.5)' // slash alpha on hsl (v3 accepted the syntax but dropped the alpha) -'hwb(0, 0%, 0%)' // hwb (hue-whiteness-blackness) +'hwb(0 0% 0%)' // hwb (hue-whiteness-blackness) ``` +Note that `hwb()` has no comma-separated form in CSS — the legacy syntax exists +only for `rgb()` and `hsl()`. + The following additional formats were already supported: - 8-digit hex (`#ff0000aa`) From 430d73793be8aaedf7e086b9752c659468c0b482 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 09:47:18 -0600 Subject: [PATCH 15/25] Update plotly.js to v4.0.0-rc.0 --- _data/jsversion.json | 2 +- _data/plotschema.json | 57335 ++++++++++++++++------------------------ 2 files changed, 22064 insertions(+), 35273 deletions(-) diff --git a/_data/jsversion.json b/_data/jsversion.json index ed344f47d..fc7c93fcc 100644 --- a/_data/jsversion.json +++ b/_data/jsversion.json @@ -1,3 +1,3 @@ { - "version": "3.6.0" + "version": "4.0.0-rc.0" } \ No newline at end of file diff --git a/_data/plotschema.json b/_data/plotschema.json index 47745dbbd..f4e5d9a66 100644 --- a/_data/plotschema.json +++ b/_data/plotschema.json @@ -141,7 +141,7 @@ ] }, "doubleClickDelay": { - "description": "Sets the delay for registering a double-click in ms. This is the time interval (in ms) between first mousedown and 2nd mouseup to constitute a double-click. This setting propagates to all on-subplot double clicks (except for geo, mapbox and map) and on-legend double clicks.", + "description": "Sets the delay for registering a double-click in ms. This is the time interval (in ms) between first mousedown and 2nd mouseup to constitute a double-click. This setting propagates to all on-subplot double clicks (except for geo and map) and on-legend double clicks.", "dflt": 300, "min": 0, "valType": "number" @@ -221,12 +221,6 @@ "min": 0, "valType": "number" }, - "linkText": { - "description": "Sets the text appearing in the `showLink` link.", - "dflt": "Edit chart", - "noBlank": true, - "valType": "string" - }, "locale": { "description": "Which localization should we use? Should be a string like 'en' or 'en-US'.", "dflt": "en-US", @@ -244,11 +238,6 @@ "min": 0, "valType": "integer" }, - "mapboxAccessToken": { - "description": "Mapbox access token (required to plot mapbox trace types) If using an Mapbox Atlas server, set this option to '' so that plotly.js won't attempt to authenticate to the public Mapbox server.", - "dflt": null, - "valType": "string" - }, "modeBarButtons": { "description": "Define fully custom mode bar buttons as nested array, where the outer arrays represents button groups, and the inner arrays have buttons config objects or names of default buttons See ./components/modebar/buttons.js for more info.", "dflt": false, @@ -279,8 +268,8 @@ "valType": "number" }, "plotlyServerURL": { - "description": "When set it determines base URL for the 'Edit in Chart Studio' `showEditInChartStudio`/`showSendToCloud` mode bar button and the showLink/sendData on-graph link. To enable sending your data to Chart Studio Cloud, you need to set both `plotlyServerURL` to 'https://chart-studio.plotly.com' and also set `showSendToCloud` to true.", - "dflt": "", + "description": "Sets the URL for the `sendChartToCloud` modebar button. When clicked, the button will send the chart data to this URL.", + "dflt": "https://cloud.plotly.com/newchart", "valType": "string" }, "queueLength": { @@ -295,7 +284,7 @@ "valType": "boolean" }, "scrollZoom": { - "description": "Determines whether mouse wheel or two-finger scroll zooms is enable. Turned on by default for gl3d, geo, mapbox and map subplots (as these subplot types do not have zoombox via pan), but turned off by default for cartesian subplots. Set `scrollZoom` to *false* to disable scrolling for all subplots.", + "description": "Determines whether mouse wheel or two-finger scroll zooms is enable. Turned on by default for gl3d, geo and map subplots (as these subplot types do not have zoombox via pan), but turned off by default for cartesian subplots. Set `scrollZoom` to *false* to disable scrolling for all subplots.", "dflt": "gl3d+geo+map", "extras": [ true, @@ -305,16 +294,10 @@ "cartesian", "gl3d", "geo", - "mapbox", "map" ], "valType": "flaglist" }, - "sendData": { - "description": "If *showLink* is true, does it contain data just link to a Chart Studio Cloud file?", - "dflt": true, - "valType": "boolean" - }, "setBackground": { "description": "Set function to add the background color (i.e. `layout.paper_color`) to a different container. This function take the graph div as first argument and the current background color as second argument. Alternatively, set to string *opaque* to ensure there is white behind it.", "dflt": "transparent", @@ -330,26 +313,11 @@ "dflt": true, "valType": "boolean" }, - "showEditInChartStudio": { - "description": "Same as `showSendToCloud`, but use a pencil icon instead of a floppy-disk. Note that if both `showSendToCloud` and `showEditInChartStudio` are turned, only `showEditInChartStudio` will be honored.", - "dflt": false, - "valType": "boolean" - }, - "showLink": { - "description": "Determines whether a link to Chart Studio Cloud is displayed at the bottom right corner of resulting graphs. Use with `sendData` and `linkText`.", - "dflt": false, - "valType": "boolean" - }, "showSendToCloud": { - "description": "Should we include a ModeBar button, labeled \"Edit in Chart Studio\", that sends this chart to chart-studio.plotly.com (formerly plot.ly) or another plotly server as specified by `plotlyServerURL` for editing, export, etc? Prior to version 1.43.0 this button was included by default, now it is opt-in using this flag. Note that this button can (depending on `plotlyServerURL` being set) send your data to an external server. However that server does not persist your data until you arrive at the Chart Studio and explicitly click \"Save\".", - "dflt": false, + "description": "Should we include a modebar button that sends this chart to a URL specified by `plotlyServerURL`, for sharing the chart with others? Note that this button will (after a confirmation step) send chart data to an external server.", + "dflt": true, "valType": "boolean" }, - "showSources": { - "description": "Adds a source-displaying function to show sources on the resulting graphs.", - "dflt": false, - "valType": "any" - }, "showTips": { "description": "Determines whether or not tips are shown while interacting with the resulting graphs.", "dflt": true, @@ -372,7 +340,7 @@ "valType": "string" }, "typesetMath": { - "description": "Determines whether math should be typeset or not, when MathJax (either v2 or v3) is present on the page.", + "description": "Determines whether math should be typeset or not, when MathJax (either v3 or v4) is present on the page.", "dflt": true, "valType": "boolean" }, @@ -459,7 +427,7 @@ "requiredOpts": [] }, "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)", + "description": "A string describing color. Supported formats: - hex (e.g. '#d3d3d3', '#d3d3d3aa') - rgb (e.g. 'rgb(255, 0, 0)', 'rgb(255 0 0)') - rgba (e.g. 'rgba(255, 0, 0, 0.5)', 'rgba(255 0 0 / 0.5)') - hsl (e.g. 'hsl(0, 100%, 50%)') - hsla (e.g. 'hsla(0, 100%, 50%, 0.5)') - hwb (e.g. 'hwb(0, 0%, 0%)') - named colors (full list: http://www.w3.org/TR/css3-color/#svg-color)", "otherOpts": [ "dflt", "arrayOk" @@ -499,7 +467,7 @@ ] }, "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.", + "description": "A string representing a combination of flags (flag order does not affect the output). Combine any of the available `flags` with *+*. (e.g. ('lines+markers')). Values in `extras` cannot be combined.", "otherOpts": [ "dflt", "extras", @@ -2363,22 +2331,12 @@ "valType": "data_array", "magic_underscores": "fig.update_coloraxes(colorbar_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_coloraxes(colorbar_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -2490,7 +2448,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -2583,7 +2541,7 @@ "magic_underscores": "fig.update_coloraxes(colorbar=dict(...))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -2627,11 +2585,6 @@ "valType": "string", "magic_underscores": "fig.update_layout(modebar_add=<VALUE>)" }, - "addsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `add`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "description": "Sets the background color of the modebar.", "editType": "modebar", @@ -2658,17 +2611,12 @@ }, "remove": { "arrayOk": true, - "description": "Determines which predefined modebar buttons to remove. Similar to `config.modeBarButtonsToRemove` option. This may include *autoScale2d*, *autoscale*, *editInChartStudio*, *editinchartstudio*, *hoverCompareCartesian*, *hovercompare*, *lasso*, *lasso2d*, *orbitRotation*, *orbitrotation*, *pan*, *pan2d*, *pan3d*, *reset*, *resetCameraDefault3d*, *resetCameraLastSave3d*, *resetGeo*, *resetSankeyGroup*, *resetScale2d*, *resetViewMap*, *resetViewMapbox*, *resetViews*, *resetcameradefault*, *resetcameralastsave*, *resetsankeygroup*, *resetscale*, *resetview*, *resetviews*, *select*, *select2d*, *sendDataToCloud*, *senddatatocloud*, *tableRotation*, *tablerotation*, *toImage*, *toggleHover*, *toggleSpikelines*, *togglehover*, *togglespikelines*, *toimage*, *zoom*, *zoom2d*, *zoom3d*, *zoomIn2d*, *zoomInGeo*, *zoomInMap*, *zoomInMapbox*, *zoomOut2d*, *zoomOutGeo*, *zoomOutMap*, *zoomOutMapbox*, *zoomin*, *zoomout*.", + "description": "Determines which predefined modebar buttons to remove. Similar to `config.modeBarButtonsToRemove` option. This may include *autoScale2d*, *autoscale*, *hoverCompareCartesian*, *hovercompare*, *lasso*, *lasso2d*, *orbitRotation*, *orbitrotation*, *pan*, *pan2d*, *pan3d*, *reset*, *resetCameraDefault3d*, *resetCameraLastSave3d*, *resetGeo*, *resetSankeyGroup*, *resetScale2d*, *resetViewMap*, *resetViews*, *resetcameradefault*, *resetcameralastsave*, *resetsankeygroup*, *resetscale*, *resetview*, *resetviews*, *select*, *select2d*, *sendChartToCloud*, *sendcharttocloud*, *tableRotation*, *tablerotation*, *toImage*, *toggleHover*, *toggleSpikelines*, *togglehover*, *togglespikelines*, *toimage*, *zoom*, *zoom2d*, *zoom3d*, *zoomIn2d*, *zoomInGeo*, *zoomInMap*, *zoomOut2d*, *zoomOutGeo*, *zoomOutMap*, *zoomin*, *zoomout*.", "dflt": "", "editType": "modebar", "valType": "string", "magic_underscores": "fig.update_layout(modebar_remove=<VALUE>)" }, - "removesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `remove`.", - "editType": "none", - "valType": "string" - }, "role": "object", "uirevision": { "description": "Controls persistence of user-driven changes related to the modebar, including `hovermode`, `dragmode`, and `showspikes` at both the root level and inside subplots. Defaults to `layout.uirevision`.", @@ -3217,11 +3165,6 @@ "valType": "any", "magic_underscores": "fig.update_layout(meta=<VALUE>)" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "computed": { "description": "Placeholder for exporting automargin-impacting values namely `margin.t`, `margin.b`, `margin.l` and `margin.r` in *full-json* mode.", "editType": "none", @@ -3524,7 +3467,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_xaxes(autorangeoptions_include_impliedEdits=<VALUE>)" @@ -3532,11 +3475,6 @@ "valType": "any", "magic_underscores": "fig.update_xaxes(autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -3615,11 +3553,6 @@ "valType": "data_array", "magic_underscores": "fig.update_xaxes(categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -3985,11 +3918,6 @@ "valType": "data_array", "magic_underscores": "fig.update_xaxes(minor_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "editType": "ticks", @@ -4666,7 +4594,7 @@ "magic_underscores": "fig.update_xaxes(spikedash=<VALUE>)" }, "spikemode": { - "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", + "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", "dflt": "toaxis", "editType": "none", "flags": [ @@ -4880,11 +4808,6 @@ "valType": "integer", "magic_underscores": "fig.update_xaxes(ticklabelindex=<VALUE>)" }, - "ticklabelindexsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", - "editType": "none", - "valType": "string" - }, "ticklabelmode": { "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", "dflt": "instant", @@ -4957,7 +4880,7 @@ "magic_underscores": "fig.update_xaxes(ticklen=<VALUE>)" }, "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property. When no other tick info is provided, overlaying (non-categorical) axes default to *sync*, while other axes default to *auto*.", "editType": "ticks", "impliedEdits": { "magic_underscores": "fig.update_xaxes(tickmode_impliedEdits=<VALUE>)" @@ -5013,22 +4936,12 @@ "valType": "data_array", "magic_underscores": "fig.update_xaxes(ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "ticks", "valType": "data_array", "magic_underscores": "fig.update_xaxes(tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -5300,7 +5213,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_yaxes(autorangeoptions_include_impliedEdits=<VALUE>)" @@ -5308,11 +5221,6 @@ "valType": "any", "magic_underscores": "fig.update_yaxes(autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -5398,11 +5306,6 @@ "valType": "data_array", "magic_underscores": "fig.update_yaxes(categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -5768,11 +5671,6 @@ "valType": "data_array", "magic_underscores": "fig.update_yaxes(minor_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "editType": "ticks", @@ -6099,7 +5997,7 @@ "magic_underscores": "fig.update_yaxes(spikedash=<VALUE>)" }, "spikemode": { - "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", + "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", "dflt": "toaxis", "editType": "none", "flags": [ @@ -6313,11 +6211,6 @@ "valType": "integer", "magic_underscores": "fig.update_yaxes(ticklabelindex=<VALUE>)" }, - "ticklabelindexsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", - "editType": "none", - "valType": "string" - }, "ticklabelmode": { "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", "dflt": "instant", @@ -6390,7 +6283,7 @@ "magic_underscores": "fig.update_yaxes(ticklen=<VALUE>)" }, "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property. When no other tick info is provided, overlaying (non-categorical) axes default to *sync*, while other axes default to *auto*.", "editType": "ticks", "impliedEdits": { "magic_underscores": "fig.update_yaxes(tickmode_impliedEdits=<VALUE>)" @@ -6446,22 +6339,12 @@ "valType": "data_array", "magic_underscores": "fig.update_yaxes(ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "ticks", "valType": "data_array", "magic_underscores": "fig.update_yaxes(tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -7097,22 +6980,12 @@ "valType": "data_array", "magic_underscores": "fig.update_ternaries(aaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_ternaries(aaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -7674,22 +7547,12 @@ "valType": "data_array", "magic_underscores": "fig.update_ternaries(baxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_ternaries(baxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -8258,22 +8121,12 @@ "valType": "data_array", "magic_underscores": "fig.update_ternaries(caxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_ternaries(caxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -8402,7 +8255,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this ternary subplot .", + "description": "If there is a layout grid, use the domain for this column in the grid for this ternary subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -8412,7 +8265,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this ternary subplot .", + "description": "If there is a layout grid, use the domain for this row in the grid for this ternary subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -9094,7 +8947,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this scene subplot .", + "description": "If there is a layout grid, use the domain for this column in the grid for this scene subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -9104,7 +8957,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this scene subplot .", + "description": "If there is a layout grid, use the domain for this row in the grid for this scene subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -9235,7 +9088,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_scenes(xaxis_autorangeoptions_include_impliedEdits=<VALUE>)" @@ -9243,11 +9096,6 @@ "valType": "any", "magic_underscores": "fig.update_scenes(xaxis_autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -9318,11 +9166,6 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(xaxis_categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -9856,22 +9699,12 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(xaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_scenes(xaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -10075,7 +9908,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_scenes(yaxis_autorangeoptions_include_impliedEdits=<VALUE>)" @@ -10083,11 +9916,6 @@ "valType": "any", "magic_underscores": "fig.update_scenes(yaxis_autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -10158,11 +9986,6 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(yaxis_categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -10696,22 +10519,12 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(yaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_scenes(yaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -10915,7 +10728,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_scenes(zaxis_autorangeoptions_include_impliedEdits=<VALUE>)" @@ -10923,11 +10736,6 @@ "valType": "any", "magic_underscores": "fig.update_scenes(zaxis_autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -10998,11 +10806,6 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(zaxis_categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -11536,22 +11339,12 @@ "valType": "data_array", "magic_underscores": "fig.update_scenes(zaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_scenes(zaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -11773,7 +11566,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this geo subplot . Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.", + "description": "If there is a layout grid, use the domain for this column in the grid for this geo subplot. Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.", "dflt": 0, "editType": "plot", "min": 0, @@ -11783,7 +11576,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this geo subplot . Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.", + "description": "If there is a layout grid, use the domain for this row in the grid for this geo subplot. Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.", "dflt": 0, "editType": "plot", "min": 0, @@ -11842,8 +11635,8 @@ }, "editType": "plot", "fitbounds": { - "description": "Determines if this subplot's view settings are auto-computed to fit trace data. On scoped maps, setting `fitbounds` leads to `center.lon` and `center.lat` getting auto-filled. On maps with a non-clipped projection, setting `fitbounds` leads to `center.lon`, `center.lat`, and `projection.rotation.lon` getting auto-filled. On maps with a clipped projection, setting `fitbounds` leads to `center.lon`, `center.lat`, `projection.rotation.lon`, `projection.rotation.lat`, `lonaxis.range` and `lataxis.range` getting auto-filled. If *locations*, only the trace's visible locations are considered in the `fitbounds` computations. If *geojson*, the entire trace input `geojson` (if provided) is considered in the `fitbounds` computations, Defaults to *false*.", - "dflt": false, + "description": "Determines if this subplot's view settings are auto-computed to fit trace data. On scoped maps, setting `fitbounds` leads to `center.lon` and `center.lat` getting auto-filled. On maps with a non-clipped projection, setting `fitbounds` leads to `center.lon`, `center.lat`, and `projection.rotation.lon` getting auto-filled. On maps with a clipped projection, setting `fitbounds` leads to `center.lon`, `center.lat`, `projection.rotation.lon`, `projection.rotation.lat`, `lonaxis.range` and `lataxis.range` getting auto-filled. If *locations* (default), only the trace's visible locations are considered in the `fitbounds` computations. If *geojson*, the entire trace input `geojson` (if provided) is considered in the `fitbounds` computations. If *false*, the view settings are used as-is; set this to opt out of auto-fitting.", + "dflt": "locations", "editType": "plot", "valType": "enumerated", "values": [ @@ -12041,6 +11834,22 @@ "magic_underscores": "fig.update_geos(projection_distance=<VALUE>)" }, "editType": "plot", + "maxscale": { + "description": "Sets the maximum zoom level of the map view, relative to `projection.scale`. A `maxscale` of *2* (200%) prevents the user from zooming in beyond twice the base zoom level. Must be greater than or equal to *0*; has no upper bound. Defaults to *null* for no upper bound on zoom.", + "dflt": null, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_geos(projection_maxscale=<VALUE>)" + }, + "minscale": { + "description": "Sets the minimum zoom level of the map view, relative to `projection.scale`. A `minscale` of *0.5* (50%) prevents the user from zooming out beyond half the base zoom level. Must be greater than or equal to *0*; has no upper bound. The default of *0* imposes no lower bound on zoom.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_geos(projection_minscale=<VALUE>)" + }, "parallels": { "description": "For conic projection types only. Sets the parallels (tangent, secant) where the cone intersects the sphere.", "editType": "plot", @@ -12380,7 +12189,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this map subplot .", + "description": "If there is a layout grid, use the domain for this column in the grid for this map subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -12390,7 +12199,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this map subplot .", + "description": "If there is a layout grid, use the domain for this row in the grid for this map subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -12448,6 +12257,17 @@ "magic_underscores": "fig.update_layout(map_domain=dict(...))" }, "editType": "plot", + "fitbounds": { + "description": "Determines if this subplot's view settings are auto-computed to fit trace data. If *locations* (default), the view is auto-fit to the lon/lat coordinates of the visible trace data. If *false*, the view settings are used as-is; set this to opt out of auto-fitting. If `fitbounds` is enabled but a user provides `center` or `zoom`, auto-fit will be skipped.", + "dflt": "locations", + "editType": "plot", + "valType": "enumerated", + "values": [ + false, + "locations" + ], + "magic_underscores": "fig.update_layout(map_fitbounds=<VALUE>)" + }, "layers": { "items": { "layer": { @@ -12494,11 +12314,6 @@ "editType": "plot", "valType": "data_array" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "plot", "role": "object", "width": { @@ -12737,432 +12552,6 @@ }, "magic_underscores": "fig.update_layout(map=dict(...))" }, - "mapbox": { - "_arrayAttrRegexps": [ - {} - ], - "_isSubplotObj": true, - "accesstoken": { - "description": "Sets the mapbox access token to be used for this mapbox map. Alternatively, the mapbox access token can be set in the configuration options under `mapboxAccessToken`. Note that accessToken are only required when `style` (e.g with values : basic, streets, outdoors, light, dark, satellite, satellite-streets ) and/or a layout layer references the Mapbox server.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_mapboxes(accesstoken=<VALUE>)" - }, - "bearing": { - "description": "Sets the bearing angle of the map in degrees counter-clockwise from North (mapbox.bearing).", - "dflt": 0, - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(bearing=<VALUE>)" - }, - "bounds": { - "east": { - "description": "Sets the maximum longitude of the map (in degrees East) if `west`, `south` and `north` are declared.", - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(bounds_east=<VALUE>)" - }, - "editType": "plot", - "north": { - "description": "Sets the maximum latitude of the map (in degrees North) if `east`, `west` and `south` are declared.", - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(bounds_north=<VALUE>)" - }, - "role": "object", - "south": { - "description": "Sets the minimum latitude of the map (in degrees North) if `east`, `west` and `north` are declared.", - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(bounds_south=<VALUE>)" - }, - "west": { - "description": "Sets the minimum longitude of the map (in degrees East) if `east`, `south` and `north` are declared.", - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(bounds_west=<VALUE>)" - }, - "magic_underscores": "fig.update_mapboxes(bounds=dict(...))" - }, - "center": { - "editType": "plot", - "lat": { - "description": "Sets the latitude of the center of the map (in degrees North).", - "dflt": 0, - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(center_lat=<VALUE>)" - }, - "lon": { - "description": "Sets the longitude of the center of the map (in degrees East).", - "dflt": 0, - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(center_lon=<VALUE>)" - }, - "role": "object", - "magic_underscores": "fig.update_mapboxes(center=dict(...))" - }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this mapbox subplot .", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_mapboxes(domain_column=<VALUE>)" - }, - "editType": "plot", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this mapbox subplot .", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_mapboxes(domain_row=<VALUE>)" - }, - "x": { - "description": "Sets the horizontal domain of this mapbox subplot (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "plot", - "items": [ - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_mapboxes(domain_x=list(...))" - }, - "y": { - "description": "Sets the vertical domain of this mapbox subplot (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "plot", - "items": [ - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_mapboxes(domain_y=list(...))" - }, - "magic_underscores": "fig.update_mapboxes(domain=dict(...))" - }, - "editType": "plot", - "layers": { - "items": { - "layer": { - "below": { - "description": "Determines if the layer will be inserted before the layer with the specified ID. If omitted or set to '', the layer will be inserted above every existing layer.", - "editType": "plot", - "valType": "string" - }, - "circle": { - "editType": "plot", - "radius": { - "description": "Sets the circle radius (mapbox.layer.paint.circle-radius). Has an effect only when `type` is set to *circle*.", - "dflt": 15, - "editType": "plot", - "valType": "number" - }, - "role": "object" - }, - "color": { - "description": "Sets the primary layer color. If `type` is *circle*, color corresponds to the circle color (mapbox.layer.paint.circle-color) If `type` is *line*, color corresponds to the line color (mapbox.layer.paint.line-color) If `type` is *fill*, color corresponds to the fill color (mapbox.layer.paint.fill-color) If `type` is *symbol*, color corresponds to the icon color (mapbox.layer.paint.icon-color)", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "coordinates": { - "description": "Sets the coordinates array contains [longitude, latitude] pairs for the image corners listed in clockwise order: top left, top right, bottom right, bottom left. Only has an effect for *image* `sourcetype`.", - "editType": "plot", - "valType": "any" - }, - "editType": "plot", - "fill": { - "editType": "plot", - "outlinecolor": { - "description": "Sets the fill outline color (mapbox.layer.paint.fill-outline-color). Has an effect only when `type` is set to *fill*.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "role": "object" - }, - "line": { - "dash": { - "description": "Sets the length of dashes and gaps (mapbox.layer.paint.line-dasharray). Has an effect only when `type` is set to *line*.", - "editType": "plot", - "valType": "data_array" - }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, - "editType": "plot", - "role": "object", - "width": { - "description": "Sets the line width (mapbox.layer.paint.line-width). Has an effect only when `type` is set to *line*.", - "dflt": 2, - "editType": "plot", - "valType": "number" - } - }, - "maxzoom": { - "description": "Sets the maximum zoom level (mapbox.layer.maxzoom). At zoom levels equal to or greater than the maxzoom, the layer will be hidden.", - "dflt": 24, - "editType": "plot", - "max": 24, - "min": 0, - "valType": "number" - }, - "minzoom": { - "description": "Sets the minimum zoom level (mapbox.layer.minzoom). At zoom levels less than the minzoom, the layer will be hidden.", - "dflt": 0, - "editType": "plot", - "max": 24, - "min": 0, - "valType": "number" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "plot", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the layer. If `type` is *circle*, opacity corresponds to the circle opacity (mapbox.layer.paint.circle-opacity) If `type` is *line*, opacity corresponds to the line opacity (mapbox.layer.paint.line-opacity) If `type` is *fill*, opacity corresponds to the fill opacity (mapbox.layer.paint.fill-opacity) If `type` is *symbol*, opacity corresponds to the icon/text opacity (mapbox.layer.paint.text-opacity)", - "dflt": 1, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "source": { - "description": "Sets the source data for this layer (mapbox.layer.source). When `sourcetype` is set to *geojson*, `source` can be a URL to a GeoJSON or a GeoJSON object. When `sourcetype` is set to *vector* or *raster*, `source` can be a URL or an array of tile URLs. When `sourcetype` is set to *image*, `source` can be a URL to an image.", - "editType": "plot", - "valType": "any" - }, - "sourceattribution": { - "description": "Sets the attribution for this source.", - "editType": "plot", - "valType": "string" - }, - "sourcelayer": { - "description": "Specifies the layer to use from a vector tile source (mapbox.layer.source-layer). Required for *vector* source type that supports multiple layers.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "sourcetype": { - "description": "Sets the source type for this layer, that is the type of the layer data.", - "dflt": "geojson", - "editType": "plot", - "valType": "enumerated", - "values": [ - "geojson", - "vector", - "raster", - "image" - ] - }, - "symbol": { - "editType": "plot", - "icon": { - "description": "Sets the symbol icon image (mapbox.layer.layout.icon-image). Full list: https://www.mapbox.com/maki-icons/", - "dflt": "marker", - "editType": "plot", - "valType": "string" - }, - "iconsize": { - "description": "Sets the symbol icon size (mapbox.layer.layout.icon-size). Has an effect only when `type` is set to *symbol*.", - "dflt": 10, - "editType": "plot", - "valType": "number" - }, - "placement": { - "description": "Sets the symbol and/or text placement (mapbox.layer.layout.symbol-placement). If `placement` is *point*, the label is placed where the geometry is located If `placement` is *line*, the label is placed along the line of the geometry If `placement` is *line-center*, the label is placed on the center of the geometry", - "dflt": "point", - "editType": "plot", - "valType": "enumerated", - "values": [ - "point", - "line", - "line-center" - ] - }, - "role": "object", - "text": { - "description": "Sets the symbol text (mapbox.layer.layout.text-field).", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "textfont": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "role": "object", - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "plot", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - } - }, - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "plot", - "valType": "string" - }, - "type": { - "description": "Sets the layer type, that is the how the layer data set in `source` will be rendered With `sourcetype` set to *geojson*, the following values are allowed: *circle*, *line*, *fill* and *symbol*. but note that *line* and *fill* are not compatible with Point GeoJSON geometries. With `sourcetype` set to *vector*, the following values are allowed: *circle*, *line*, *fill* and *symbol*. With `sourcetype` set to *raster* or *image*, only the *raster* value is allowed.", - "dflt": "circle", - "editType": "plot", - "valType": "enumerated", - "values": [ - "circle", - "line", - "fill", - "symbol", - "raster" - ] - }, - "visible": { - "description": "Determines whether this layer is displayed", - "dflt": true, - "editType": "plot", - "valType": "boolean" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_mapboxes(layers=list(...))" - }, - "pitch": { - "description": "Sets the pitch angle of the map (in degrees, where *0* means perpendicular to the surface of the map) (mapbox.pitch).", - "dflt": 0, - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(pitch=<VALUE>)" - }, - "role": "object", - "style": { - "description": "Defines the map layers that are rendered by default below the trace layers defined in `data`, which are themselves by default rendered below the layers defined in `layout.mapbox.layers`. These layers can be defined either explicitly as a Mapbox Style object which can contain multiple layer definitions that load data from any public or private Tile Map Service (TMS or XYZ) or Web Map Service (WMS) or implicitly by using one of the built-in style objects which use WMSes which do not require any access tokens, or by using a default Mapbox style or custom Mapbox style URL, both of which require a Mapbox access token Note that Mapbox access token can be set in the `accesstoken` attribute or in the `mapboxAccessToken` config option. Mapbox Style objects are of the form described in the Mapbox GL JS documentation available at https://docs.mapbox.com/mapbox-gl-js/style-spec The built-in plotly.js styles objects are: carto-darkmatter, carto-positron, open-street-map, stamen-terrain, stamen-toner, stamen-watercolor, white-bg The built-in Mapbox styles are: basic, streets, outdoors, light, dark, satellite, satellite-streets Mapbox style URLs are of the form: mapbox://mapbox.mapbox--", - "dflt": "basic", - "editType": "plot", - "valType": "any", - "values": [ - "basic", - "streets", - "outdoors", - "light", - "dark", - "satellite", - "satellite-streets", - "carto-darkmatter", - "carto-positron", - "open-street-map", - "stamen-terrain", - "stamen-toner", - "stamen-watercolor", - "white-bg" - ], - "magic_underscores": "fig.update_mapboxes(style=<VALUE>)" - }, - "uirevision": { - "description": "Controls persistence of user-driven changes in the view: `center`, `zoom`, `bearing`, `pitch`. Defaults to `layout.uirevision`.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_mapboxes(uirevision=<VALUE>)" - }, - "zoom": { - "description": "Sets the zoom level of the map (mapbox.zoom).", - "dflt": 1, - "editType": "plot", - "valType": "number", - "magic_underscores": "fig.update_mapboxes(zoom=<VALUE>)" - }, - "magic_underscores": "fig.update_mapboxes(...)" - }, "polar": { "_isSubplotObj": true, "angularaxis": { @@ -13183,11 +12572,6 @@ "valType": "data_array", "magic_underscores": "fig.update_polars(angularaxis_categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -13688,22 +13072,12 @@ "valType": "data_array", "magic_underscores": "fig.update_polars(angularaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_polars(angularaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -13749,7 +13123,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this polar subplot .", + "description": "If there is a layout grid, use the domain for this column in the grid for this polar subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -13759,7 +13133,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this polar subplot .", + "description": "If there is a layout grid, use the domain for this row in the grid for this polar subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -13885,7 +13259,7 @@ "editType": "plot", "include": { "arrayOk": true, - "description": "Ensure this value is included in autorange.", + "description": "Extends the autorange to include this value or array of values, even when they fall outside the data range. Has no effect on endpoints set by `autorangeoptions.minallowed` or `autorangeoptions.maxallowed`. Subject to `autorangeoptions.clipmin` and `autorangeoptions.clipmax`.", "editType": "plot", "impliedEdits": { "magic_underscores": "fig.update_polars(radialaxis_autorangeoptions_include_impliedEdits=<VALUE>)" @@ -13893,11 +13267,6 @@ "valType": "any", "magic_underscores": "fig.update_polars(radialaxis_autorangeoptions_include=<VALUE>)" }, - "includesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `include`.", - "editType": "none", - "valType": "string" - }, "maxallowed": { "description": "Use this value exactly as autorange maximum.", "editType": "plot", @@ -13976,11 +13345,6 @@ "valType": "data_array", "magic_underscores": "fig.update_polars(radialaxis_categoryarray=<VALUE>)" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`. Set `categoryorder` to *total ascending* or *total descending* if order should be determined by the numerical order of the values. Similarly, the order can be determined by the min, max, sum, mean, geometric mean or median of all the values.", "dflt": "trace", @@ -14515,22 +13879,12 @@ "valType": "data_array", "magic_underscores": "fig.update_polars(radialaxis_ticktext=<VALUE>)" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_polars(radialaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -14720,7 +14074,7 @@ }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this smith subplot .", + "description": "If there is a layout grid, use the domain for this column in the grid for this smith subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -14730,7 +14084,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this smith subplot .", + "description": "If there is a layout grid, use the domain for this row in the grid for this smith subplot.", "dflt": 0, "editType": "plot", "min": 0, @@ -15067,11 +14421,6 @@ "valType": "data_array", "magic_underscores": "fig.update_smiths(imaginaryaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 2, @@ -15393,11 +14742,6 @@ "valType": "data_array", "magic_underscores": "fig.update_smiths(realaxis_tickvals=<VALUE>)" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 2, @@ -15484,7 +14828,7 @@ "magic_underscores": "fig.update_annotations(ax=<VALUE>)" }, "axref": { - "description": "Indicates in what coordinates the tail of the annotation (ax,ay) is specified. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis. In order for absolute positioning of the arrow to work, *axref* must be exactly the same as *xref*, otherwise *axref* will revert to *pixel* (explained next). For relative positioning, *axref* can be set to *pixel*, in which case the *ax* value is specified in pixels relative to *x*. Absolute positioning is useful for trendline annotations which should continue to indicate the correct trend when zoomed. Relative positioning is useful for specifying the text offset for an annotated point.", + "description": "Indicates in what coordinates the tail of the annotation (ax,ay) is specified. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis. In order for absolute positioning of the arrow to work, *axref* must be exactly the same as *xref*, otherwise *axref* will revert to *pixel* (explained next). For relative positioning, *axref* can be set to *pixel*, in which case the *ax* value is specified in pixels relative to *x*. Absolute positioning is useful for trendline annotations which should continue to indicate the correct trend when zoomed. Relative positioning is useful for specifying the text offset for an annotated point.", "dflt": "pixel", "editType": "calc", "valType": "enumerated", @@ -15501,7 +14845,7 @@ "magic_underscores": "fig.update_annotations(ay=<VALUE>)" }, "ayref": { - "description": "Indicates in what coordinates the tail of the annotation (ax,ay) is specified. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis. In order for absolute positioning of the arrow to work, *ayref* must be exactly the same as *yref*, otherwise *ayref* will revert to *pixel* (explained next). For relative positioning, *ayref* can be set to *pixel*, in which case the *ay* value is specified in pixels relative to *y*. Absolute positioning is useful for trendline annotations which should continue to indicate the correct trend when zoomed. Relative positioning is useful for specifying the text offset for an annotated point.", + "description": "Indicates in what coordinates the tail of the annotation (ax,ay) is specified. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis. In order for absolute positioning of the arrow to work, *ayref* must be exactly the same as *yref*, otherwise *ayref* will revert to *pixel* (explained next). For relative positioning, *ayref* can be set to *pixel*, in which case the *ay* value is specified in pixels relative to *y*. Absolute positioning is useful for trendline annotations which should continue to indicate the correct trend when zoomed. Relative positioning is useful for specifying the text offset for an annotated point.", "dflt": "pixel", "editType": "calc", "valType": "enumerated", @@ -15917,7 +15261,7 @@ "magic_underscores": "fig.update_annotations(xclick=<VALUE>)" }, "xref": { - "description": "Sets the annotation's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", + "description": "Sets the annotation's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", "editType": "calc", "valType": "enumerated", "values": [ @@ -15959,7 +15303,7 @@ "magic_underscores": "fig.update_annotations(yclick=<VALUE>)" }, "yref": { - "description": "Sets the annotation's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", + "description": "Sets the annotation's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", "editType": "calc", "valType": "enumerated", "values": [ @@ -16478,7 +15822,7 @@ }, "xref": { "arrayOk": true, - "description": "Sets the shape's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis. If an array of axis IDs is provided, each `x` value will refer to the corresponding axis, e.g., ['x', 'x2'] for a rectangle, line, or circle means `x0` uses the `x` axis and `x1` uses the `x2` axis. Path shapes using an array should have one entry for each x coordinate in the string.", + "description": "Sets the shape's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis. If an array of axis IDs is provided, each `x` value will refer to the corresponding axis, e.g., ['x', 'x2'] for a rectangle, line, or circle means `x0` uses the `x` axis and `x1` uses the `x2` axis. Path shapes using an array should have one entry for each x coordinate in the string.", "editType": "calc", "valType": "enumerated", "values": [ @@ -16487,11 +15831,6 @@ ], "magic_underscores": "fig.update_shapes(xref=<VALUE>)" }, - "xrefsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `xref`.", - "editType": "none", - "valType": "string" - }, "xsizemode": { "description": "Sets the shapes's sizing mode along the x axis. If set to *scaled*, `x0`, `x1` and x coordinates within `path` refer to data values on the x axis or a fraction of the plot area's width (`xref` set to *paper*). If set to *pixel*, `xanchor` specifies the x position in terms of data or plot fraction but `x0`, `x1` and x coordinates within `path` are pixels relative to `xanchor`. This way, the shape can have a fixed width while maintaining a position relative to data or plot fraction. Note: `xsizemode` *pixel* is not supported when `xref` is an array.", "dflt": "scaled", @@ -16541,7 +15880,7 @@ }, "yref": { "arrayOk": true, - "description": "Sets the shape's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis. If an array of axis IDs is provided, each `y` value will refer to the corresponding axis, e.g., ['y', 'y2'] for a rectangle, line, or circle means `y0` uses the `y` axis and `y1` uses the `y2` axis. Path shapes using an array should have one entry for each y coordinate in the string.", + "description": "Sets the shape's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis. If an array of axis IDs is provided, each `y` value will refer to the corresponding axis, e.g., ['y', 'y2'] for a rectangle, line, or circle means `y0` uses the `y` axis and `y1` uses the `y2` axis. Path shapes using an array should have one entry for each y coordinate in the string.", "editType": "calc", "valType": "enumerated", "values": [ @@ -16550,11 +15889,6 @@ ], "magic_underscores": "fig.update_shapes(yref=<VALUE>)" }, - "yrefsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `yref`.", - "editType": "none", - "valType": "string" - }, "ysizemode": { "description": "Sets the shapes's sizing mode along the y axis. If set to *scaled*, `y0`, `y1` and y coordinates within `path` refer to data values on the y axis or a fraction of the plot area's height (`yref` set to *paper*). If set to *pixel*, `yanchor` specifies the y position in terms of data or plot fraction but `y0`, `y1` and y coordinates within `path` are pixels relative to `yanchor`. This way, the shape can have a fixed height while maintaining a position relative to data or plot fraction. Note: `ysizemode` *pixel* is not supported when `yref` is an array.", "dflt": "scaled", @@ -17128,7 +16462,7 @@ "magic_underscores": "fig.update_layout_images(xanchor=<VALUE>)" }, "xref": { - "description": "Sets the images's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", + "description": "Sets the images's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", "dflt": "paper", "editType": "arraydraw", "valType": "enumerated", @@ -17158,7 +16492,7 @@ "magic_underscores": "fig.update_layout_images(yanchor=<VALUE>)" }, "yref": { - "description": "Sets the images's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", + "description": "Sets the images's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", "dflt": "paper", "editType": "arraydraw", "valType": "enumerated", @@ -18097,7 +17431,7 @@ "valType": "any" }, "xref": { - "description": "Sets the selection's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", + "description": "Sets the selection's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to a x coordinate. If set to *paper*, the `x` position refers to the distance from the left of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right). If set to a x axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the left of the domain of that axis: e.g., *x2 domain* refers to the domain of the second x axis and a x position of 0.5 refers to the point between the left and the right of the domain of the second x axis.", "editType": "arraydraw", "valType": "enumerated", "values": [ @@ -18116,7 +17450,7 @@ "valType": "any" }, "yref": { - "description": "Sets the selection's x coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", + "description": "Sets the selection's x coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top). If set to a y axis ID followed by *domain* (separated by a space), the position behaves like for *paper*, but refers to the distance in fractions of the domain length from the bottom of the domain of that axis: e.g., *y2 domain* refers to the domain of the second y axis and a y position of 0.5 refers to the point between the bottom and the top of the domain of the second y axis.", "editType": "arraydraw", "valType": "enumerated", "values": [ @@ -18129,13 +17463,6 @@ "role": "object", "magic_underscores": "fig.update_layout(selections=list(...))" }, - "hidesources": { - "description": "Determines whether or not a text link citing the data source is placed at the bottom-right cored of the figure. Has only an effect only on graphs that have been generated via forked graphs from the Chart Studio Cloud (at https://chart-studio.plotly.com or on-premise).", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_layout(hidesources=<VALUE>)" - }, "editType": "calc", "magic_underscores": "fig.update_layout(...)" } @@ -18346,11 +17673,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatter'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -18365,11 +17687,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='scatter'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "x0": { "anim": true, "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", @@ -18393,11 +17710,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='scatter'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "y0": { "anim": true, "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", @@ -18422,11 +17734,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatter'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -18446,11 +17753,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatter'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. ", @@ -18466,11 +17768,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatter'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -18479,14 +17776,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatter'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -18504,11 +17796,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatter'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -18524,20 +17811,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatter'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='scatter'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", @@ -18550,22 +17832,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatter'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatter'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -18695,11 +17967,6 @@ ], "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scatter'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -19228,22 +18495,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatter'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatter'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -19355,7 +18612,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -19448,7 +18705,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatter'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -19458,11 +18715,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatter'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "gradient": { "color": { @@ -19472,11 +18724,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scatter'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "type": { @@ -19493,11 +18740,6 @@ ], "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scatter'))" }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scatter'))" }, "line": { @@ -19570,7 +18812,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatter'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -19580,11 +18822,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatter'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "dash": { "arrayOk": true, "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*).", @@ -19601,11 +18838,6 @@ ], "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scatter'))" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -19624,11 +18856,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatter'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatter'))" }, "maxdisplayed": { @@ -19649,11 +18876,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatter'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -19705,11 +18927,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatter'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "standoff": { "anim": true, "arrayOk": true, @@ -19720,11 +18937,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scatter'))" }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -20221,11 +19433,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatter'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatter'))" }, "line": { @@ -20238,11 +19445,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(line_backoff=<VALUE>, selector=dict(type='scatter'))" }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, "color": { "anim": true, "description": "Sets the line color.", @@ -20316,11 +19518,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatter'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -20332,11 +19529,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatter'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -20353,11 +19545,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scatter'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -20367,11 +19554,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scatter'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -20379,11 +19561,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatter'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -20396,11 +19573,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatter'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -20415,11 +19587,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scatter'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -20436,11 +19603,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatter'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -20455,11 +19617,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatter'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatter'))" }, "error_x": { @@ -20475,16 +19632,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='scatter'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "style", @@ -20582,16 +19729,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='scatter'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "style", @@ -20842,11 +19979,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(fillpattern_bgcolor=<VALUE>, selector=dict(type='scatter'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -20856,11 +19988,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(fillpattern_fgcolor=<VALUE>, selector=dict(type='scatter'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -20887,11 +20014,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(fillpattern_path=<VALUE>, selector=dict(type='scatter'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -20911,11 +20033,6 @@ ], "magic_underscores": "fig.update_traces(fillpattern_shape=<VALUE>, selector=dict(type='scatter'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -20925,11 +20042,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(fillpattern_size=<VALUE>, selector=dict(type='scatter'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -20940,11 +20052,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(fillpattern_solidity=<VALUE>, selector=dict(type='scatter'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(fillpattern=dict(...), selector=dict(type='scatter'))" }, "hoverlabel": { @@ -20961,11 +20068,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatter'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -20973,11 +20075,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatter'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -20985,11 +20082,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatter'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -20998,11 +20090,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatter'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -21014,11 +20101,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatter'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -21035,11 +20117,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatter'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -21049,11 +20126,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatter'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -21061,11 +20133,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatter'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -21078,11 +20145,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatter'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -21097,11 +20159,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatter'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -21118,11 +20175,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatter'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -21137,11 +20189,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatter'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatter'))" }, "namelength": { @@ -21153,11 +20200,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatter'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -21245,28 +20287,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatter'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scatter'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scatter'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scatter'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scatter'))" }, "categories": [ @@ -21505,22 +20525,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattergl'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "x": { "description": "Sets the x coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='scattergl'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "x0": { "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", "dflt": 0, @@ -21541,11 +20551,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='scattergl'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "y0": { "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", "dflt": 0, @@ -21568,11 +20573,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattergl'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -21592,11 +20592,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattergl'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. ", @@ -21612,11 +20607,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattergl'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -21625,14 +20615,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattergl'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -21650,11 +20635,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattergl'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -21670,20 +20650,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattergl'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "calc", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='scattergl'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "calc", "valType": "string", @@ -21696,22 +20671,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattergl'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattergl'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -21785,11 +20750,6 @@ "valType": "angle", "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattergl'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -22317,22 +21277,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattergl'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattergl'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -22444,7 +21394,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "calc", "valType": "enumerated", "values": [ @@ -22537,7 +21487,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattergl'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -22547,11 +21497,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattergl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "autocolorscale": { @@ -22622,7 +21567,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scattergl'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -22632,11 +21577,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scattergl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -22654,11 +21594,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scattergl'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scattergl'))" }, "opacity": { @@ -22670,11 +21605,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattergl'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -22725,11 +21655,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattergl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -23226,11 +22151,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattergl'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattergl'))" }, "line": { @@ -23288,11 +22208,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattergl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -23304,11 +22219,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattergl'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "role": "object", "size": { "arrayOk": true, @@ -23317,11 +22227,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattergl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -23334,11 +22239,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattergl'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -23351,11 +22251,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scattergl'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -23368,11 +22263,6 @@ ], "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattergl'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattergl'))" }, "error_x": { @@ -23388,16 +22278,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='scattergl'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "calc", @@ -23495,16 +22375,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='scattergl'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "calc", @@ -23717,11 +22587,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattergl'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -23729,11 +22594,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattergl'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -23741,11 +22601,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattergl'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -23754,11 +22609,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattergl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -23770,11 +22620,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattergl'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -23791,11 +22636,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattergl'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -23805,11 +22645,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattergl'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -23817,11 +22652,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattergl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -23834,11 +22664,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattergl'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -23853,11 +22678,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattergl'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -23874,11 +22694,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattergl'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -23893,11 +22708,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattergl'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattergl'))" }, "namelength": { @@ -23909,11 +22719,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattergl'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -23980,28 +22785,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattergl'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattergl'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattergl'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattergl'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scattergl'))" }, "categories": [ @@ -24210,11 +22993,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='bar'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -24229,11 +23007,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='bar'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "x0": { "anim": true, "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", @@ -24257,11 +23030,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='bar'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "y0": { "anim": true, "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", @@ -24286,11 +23054,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(base=<VALUE>, selector=dict(type='bar'))" }, - "basesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `base`.", - "editType": "none", - "valType": "string" - }, "width": { "arrayOk": true, "description": "Sets the bar width (in position axis units).", @@ -24300,11 +23063,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='bar'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "offset": { "arrayOk": true, "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.", @@ -24313,11 +23071,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='bar'))" }, - "offsetsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `offset`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", @@ -24326,11 +23079,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='bar'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "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. If *none*, no text appears.", @@ -24345,11 +23093,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='bar'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `value` and `label`.", @@ -24365,11 +23108,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='bar'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -24378,14 +23116,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='bar'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -24403,11 +23136,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='bar'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `value` and `label`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -24423,20 +23151,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='bar'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='bar'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", @@ -24449,22 +23172,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='bar'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='bar'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -25081,22 +23794,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='bar'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='bar'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -25208,7 +23911,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -25301,7 +24004,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='bar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -25311,11 +24014,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "cornerradius": { "description": "Sets the rounding of corners. May be an integer number of pixels, or a percentage of bar width (as a string ending in %). Defaults to `layout.barcornerradius`. In stack or relative barmode, the first trace to set cornerradius is used for the whole stack.", "editType": "calc", @@ -25392,7 +24090,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='bar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -25402,11 +24100,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -25426,11 +24119,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='bar'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='bar'))" }, "opacity": { @@ -25443,11 +24131,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='bar'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "pattern": { "bgcolor": { "arrayOk": true, @@ -25456,11 +24139,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='bar'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -25470,11 +24148,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='bar'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -25501,11 +24174,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='bar'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -25525,11 +24193,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='bar'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -25539,11 +24202,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='bar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -25554,11 +24212,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='bar'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='bar'))" }, "reversescale": { @@ -25592,11 +24245,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `text`.", "editType": "calc", "family": { @@ -25608,11 +24256,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='bar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -25629,11 +24272,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='bar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -25643,11 +24281,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='bar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -25655,11 +24288,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='bar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -25672,11 +24300,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='bar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -25691,11 +24314,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='bar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -25712,11 +24330,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='bar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -25731,11 +24344,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='bar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='bar'))" }, "error_x": { @@ -25751,16 +24359,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='bar'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "style", @@ -25858,16 +24456,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='bar'))" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the stroke color of the error bars.", "editType": "style", @@ -26057,11 +24645,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='bar'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -26069,11 +24652,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='bar'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -26081,11 +24659,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='bar'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -26094,11 +24667,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -26110,11 +24678,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='bar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -26131,11 +24694,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='bar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -26145,11 +24703,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='bar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -26157,11 +24710,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='bar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -26174,11 +24722,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='bar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -26193,11 +24736,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='bar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -26214,11 +24752,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='bar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -26233,11 +24766,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='bar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='bar'))" }, "namelength": { @@ -26249,11 +24777,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='bar'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -26283,11 +24806,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `text` lying inside the bar.", "editType": "calc", "family": { @@ -26299,11 +24817,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='bar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -26320,11 +24833,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='bar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -26334,11 +24842,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='bar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -26346,11 +24849,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='bar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -26363,11 +24861,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='bar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -26382,11 +24875,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='bar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -26403,11 +24891,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='bar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -26422,11 +24905,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='bar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='bar'))" }, "outsidetextfont": { @@ -26436,11 +24914,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='bar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `text` lying outside the bar.", "editType": "calc", "family": { @@ -26452,11 +24925,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='bar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -26473,11 +24941,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='bar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -26487,11 +24950,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='bar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -26499,11 +24957,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='bar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -26516,11 +24969,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='bar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -26535,11 +24983,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='bar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -26556,11 +24999,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='bar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -26575,11 +25013,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='bar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='bar'))" }, "xcalendar": { @@ -26638,28 +25071,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='bar'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='bar'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='bar'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='bar'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='bar'))" }, "categories": [ @@ -26747,11 +25158,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(title_font_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `title`.", "editType": "plot", "family": { @@ -26763,11 +25169,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(title_font_family=<VALUE>, selector=dict(type='pie'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -26784,11 +25185,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(title_font_lineposition=<VALUE>, selector=dict(type='pie'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -26798,11 +25194,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(title_font_shadow=<VALUE>, selector=dict(type='pie'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -26810,11 +25201,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(title_font_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -26827,11 +25213,6 @@ ], "magic_underscores": "fig.update_traces(title_font_style=<VALUE>, selector=dict(type='pie'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -26846,11 +25227,6 @@ ], "magic_underscores": "fig.update_traces(title_font_textcase=<VALUE>, selector=dict(type='pie'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -26867,11 +25243,6 @@ ], "magic_underscores": "fig.update_traces(title_font_variant=<VALUE>, selector=dict(type='pie'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -26886,11 +25257,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(title_font_weight=<VALUE>, selector=dict(type='pie'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(title_font=dict(...), selector=dict(type='pie'))" }, "position": { @@ -26938,11 +25304,6 @@ "valType": "boolean", "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='pie'))" }, - "showlegendsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `showlegend`.", - "editType": "none", - "valType": "string" - }, "legend": { "arrayOk": true, "description": "Sets the reference to a legend to show the pie slices in. Can be an array if `values` is set. In that case, each entry specifies the legend reference for one slice. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", @@ -26951,11 +25312,6 @@ "valType": "subplotid", "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='pie'))" }, - "legendsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `legend`.", - "editType": "none", - "valType": "string" - }, "legendrank": { "arrayOk": true, "description": "Sets the legend rank for this pie. If passed as an array, this will set the legend rank of the individual pie slices. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", @@ -26964,11 +25320,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='pie'))" }, - "legendranksrc": { - "description": "Sets the source reference on Chart Studio Cloud for `legendrank`.", - "editType": "none", - "valType": "string" - }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", @@ -27109,33 +25460,18 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='pie'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Sets the values of the sectors. If omitted, we count occurrences of each label.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='pie'))" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "labels": { "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='pie'))" }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, "dlabel": { "description": "Sets the label step. See `label0` for more info.", "dflt": 1, @@ -27160,22 +25496,12 @@ "valType": "number", "magic_underscores": "fig.update_traces(pull=<VALUE>, selector=dict(type='pie'))" }, - "pullsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `pull`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='pie'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Specifies the location of the `textinfo`.", @@ -27190,11 +25516,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='pie'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`.", @@ -27210,11 +25531,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='pie'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -27223,14 +25539,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='pie'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. Flags are rendered in a fixed order; use `hovertemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "dflt": "all", "editType": "none", "extras": [ @@ -27248,11 +25559,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='pie'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -27268,11 +25574,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='pie'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -27280,25 +25581,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='pie'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='pie'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this pie trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this pie trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -27308,7 +25599,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this pie trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this pie trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -27379,11 +25670,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='pie'))" }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "color": { @@ -27394,11 +25680,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -27410,11 +25691,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='pie'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='pie'))" }, "pattern": { @@ -27425,11 +25701,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='pie'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -27439,11 +25710,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='pie'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -27470,11 +25736,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='pie'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -27494,11 +25755,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='pie'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -27508,11 +25764,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -27523,11 +25774,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='pie'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='pie'))" }, "role": "object", @@ -27540,11 +25786,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo`.", "editType": "plot", "family": { @@ -27556,11 +25797,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='pie'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -27577,11 +25813,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='pie'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -27591,11 +25822,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='pie'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -27603,11 +25829,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -27620,11 +25841,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='pie'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -27639,11 +25855,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='pie'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -27660,11 +25871,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='pie'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -27679,15 +25885,10 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='pie'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='pie'))" }, "textinfo": { - "description": "Determines which trace information appear on the graph.", + "description": "Determines what trace information appears on the graph. Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "editType": "calc", "extras": [ "none" @@ -27735,11 +25936,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='pie'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -27747,11 +25943,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='pie'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -27759,11 +25950,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='pie'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -27772,11 +25958,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -27788,11 +25969,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='pie'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -27809,11 +25985,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='pie'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -27823,11 +25994,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='pie'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -27835,11 +26001,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -27852,11 +26013,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='pie'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -27871,11 +26027,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='pie'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -27892,11 +26043,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='pie'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -27911,11 +26057,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='pie'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='pie'))" }, "namelength": { @@ -27927,11 +26068,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='pie'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -27949,11 +26085,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying inside the sector.", "editType": "plot", "family": { @@ -27965,11 +26096,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='pie'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -27986,11 +26112,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='pie'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -28000,11 +26121,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='pie'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -28012,11 +26128,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -28029,11 +26140,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='pie'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -28048,11 +26154,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='pie'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -28069,11 +26170,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='pie'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -28088,11 +26184,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='pie'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='pie'))" }, "insidetextorientation": { @@ -28115,11 +26206,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='pie'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying outside the sector.", "editType": "plot", "family": { @@ -28131,11 +26217,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='pie'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -28152,11 +26233,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='pie'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -28166,11 +26242,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='pie'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -28178,11 +26249,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='pie'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -28195,11 +26261,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='pie'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -28214,11 +26275,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='pie'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -28235,11 +26291,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='pie'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -28254,11 +26305,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='pie'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='pie'))" }, "rotation": { @@ -28288,28 +26334,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='pie'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='pie'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='pie'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='pie'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='pie'))" }, "categories": [ @@ -28329,11 +26353,6 @@ "editType": "calc", "valType": "data_array" }, - "hiddenlabelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hiddenlabels`.", - "editType": "none", - "valType": "string" - }, "piecolorway": { "description": "Sets the default pie slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendpiecolors`.", "editType": "calc", @@ -28534,11 +26553,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='heatmap'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -28556,11 +26570,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='heatmap'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "x0": { "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", "dflt": 0, @@ -28611,11 +26620,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='heatmap'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "y0": { "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", "dflt": 0, @@ -28662,22 +26666,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='heatmap'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets the text elements associated with each z value.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='heatmap'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `z` and `text`.", "dflt": "", @@ -28698,14 +26692,9 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='heatmap'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -28723,11 +26712,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='heatmap'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -28743,20 +26727,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='heatmap'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='heatmap'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", @@ -28769,22 +26748,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='heatmap'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='heatmap'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -29442,22 +27411,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='heatmap'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='heatmap'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -29569,7 +27528,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -29672,7 +27631,7 @@ "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='heatmap'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -29707,7 +27666,7 @@ "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='heatmap'))" }, "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", "dflt": "", "editType": "none", "valType": "string", @@ -29777,11 +27736,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='heatmap'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -29789,11 +27743,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='heatmap'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -29801,11 +27750,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='heatmap'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -29814,11 +27758,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='heatmap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -29830,11 +27769,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='heatmap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -29851,11 +27785,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='heatmap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -29865,11 +27794,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='heatmap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -29877,11 +27801,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='heatmap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -29894,11 +27813,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='heatmap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -29913,11 +27827,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='heatmap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -29934,11 +27843,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='heatmap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -29953,11 +27857,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='heatmap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='heatmap'))" }, "namelength": { @@ -29969,11 +27868,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='heatmap'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -30054,28 +27948,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='heatmap'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='heatmap'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='heatmap'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='heatmap'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='heatmap'))" }, "categories": [ @@ -30264,11 +28136,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='image'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -30310,11 +28177,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='image'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, "source": { "description": "Specifies the data URI of the image to be visualized. The URI consists of \"data:image/[][;base64\\\\],\"", "editType": "calc", @@ -30327,25 +28189,15 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='image'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "description": "Same as `text`.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='image'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "x+y+z+text+name", "editType": "none", "extras": [ @@ -30364,11 +28216,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='image'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `z`, `color` and `colormodel`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -30384,11 +28231,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='image'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -30396,22 +28238,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='image'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='image'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -30512,11 +28344,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='image'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -30524,11 +28351,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='image'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -30536,11 +28358,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='image'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -30549,11 +28366,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='image'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -30565,11 +28377,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='image'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -30586,11 +28393,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='image'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -30600,11 +28402,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='image'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -30612,11 +28409,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='image'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -30629,11 +28421,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='image'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -30648,11 +28435,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='image'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -30669,11 +28451,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='image'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -30688,11 +28465,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='image'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='image'))" }, "namelength": { @@ -30704,11 +28476,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='image'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -30725,28 +28492,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='image'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='image'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='image'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='image'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='image'))" }, "categories": [ @@ -30949,11 +28694,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='contour'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -30971,11 +28711,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='contour'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "x0": { "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", "dflt": 0, @@ -31018,11 +28753,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='contour'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "y0": { "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", "dflt": 0, @@ -31061,22 +28791,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='contour'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets the text elements associated with each z value.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='contour'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `z` and `text`.", "dflt": "", @@ -31097,14 +28817,9 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='contour'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -31122,11 +28837,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='contour'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -31142,20 +28852,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='contour'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='contour'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", @@ -31168,22 +28873,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='contour'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='contour'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -31875,22 +29570,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='contour'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='contour'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -32002,7 +29687,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -32105,7 +29790,7 @@ "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='contour'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -32140,7 +29825,7 @@ "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='contour'))" }, "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", "dflt": "", "editType": "none", "valType": "string", @@ -32332,7 +30017,7 @@ "magic_underscores": "fig.update_traces(contours_labelformat=<VALUE>, selector=dict(type='contour'))" }, "operation": { - "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.", + "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.", "dflt": "=", "editType": "calc", "valType": "enumerated", @@ -32431,11 +30116,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='contour'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -32443,11 +30123,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='contour'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -32455,11 +30130,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='contour'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -32468,11 +30138,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='contour'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -32484,11 +30149,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='contour'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -32505,11 +30165,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='contour'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -32519,11 +30174,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='contour'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -32531,11 +30181,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='contour'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -32548,11 +30193,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='contour'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -32567,11 +30207,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='contour'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -32588,11 +30223,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='contour'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -32607,11 +30237,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='contour'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='contour'))" }, "namelength": { @@ -32623,11 +30248,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='contour'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -32716,28 +30336,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='contour'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='contour'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='contour'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='contour'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='contour'))" }, "categories": [ @@ -32752,21 +30350,22 @@ }, "type": "contour" }, - "table": { - "animatable": false, + "quiver": { + "animatable": true, "attributes": { - "type": "table", + "type": "quiver", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='quiver'))" }, "uid": { + "anim": true, "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='quiver'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -32778,21 +30377,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='quiver'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='quiver'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='quiver'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='quiver'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='quiver'))" }, "legendgrouptitle": { "editType": "style", @@ -32800,7 +30413,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='quiver'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -32810,7 +30423,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='quiver'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -32825,7 +30438,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='quiver'))" }, "role": "object", "shadow": { @@ -32833,13 +30446,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='quiver'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='quiver'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -32850,7 +30463,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='quiver'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -32863,7 +30476,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='quiver'))" }, "variant": { "description": "Sets the variant of the font.", @@ -32878,7 +30491,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='quiver'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -32891,9 +30504,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='quiver'))" }, "role": "object", "text": { @@ -32901,55 +30514,123 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='quiver'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='quiver'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='quiver'))" }, "ids": { + "anim": true, "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='quiver'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "x": { + "anim": true, + "description": "Sets the x coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='quiver'))" }, - "columnorder": { - "description": "Specifies the rendered order of the data columns; for example, a value `2` at position `0` means that column index `0` in the data will be rendered as the third column, as columns have an index base of zero.", + "x0": { + "anim": true, + "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='quiver'))" + }, + "dx": { + "anim": true, + "description": "Sets the x coordinate step. See `x0` for more info.", + "dflt": 1, "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='quiver'))" + }, + "y": { + "anim": true, + "description": "Sets the y coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(columnorder=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='quiver'))" }, - "columnordersrc": { - "description": "Sets the source reference on Chart Studio Cloud for `columnorder`.", - "editType": "none", - "valType": "string" + "y0": { + "anim": true, + "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='quiver'))" }, - "columnwidth": { - "arrayOk": true, - "description": "The width of columns expressed as a ratio. Columns fill the available width in proportion of their specified column widths.", - "dflt": null, + "dy": { + "anim": true, + "description": "Sets the y coordinate step. See `y0` for more info.", + "dflt": 1, "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(columnwidth=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='quiver'))" }, - "columnwidthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `columnwidth`.", - "editType": "none", - "valType": "string" + "u": { + "anim": true, + "description": "Sets the x components of the arrow vectors.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(u=<VALUE>, selector=dict(type='quiver'))" + }, + "v": { + "anim": true, + "description": "Sets the y components of the arrow vectors.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(v=<VALUE>, selector=dict(type='quiver'))" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='quiver'))" + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='quiver'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -32960,669 +30641,1082 @@ "flags": [ "x", "y", - "z", + "u", + "v", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='quiver'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", "editType": "none", - "valType": "string" + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='quiver'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='quiver'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='quiver'))" + }, + "uhoverformat": { + "description": "Sets the hover text formatting rule for `u` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(uhoverformat=<VALUE>, selector=dict(type='quiver'))" + }, + "vhoverformat": { + "description": "Sets the hover text formatting rule for `v` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(vhoverformat=<VALUE>, selector=dict(type='quiver'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='table'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='quiver'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='quiver'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='quiver'))" }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this table trace .", - "dflt": 0, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='quiver'))" + }, + "marker": { + "arrowsize": { + "description": "Sets the size of the arrow head relative to `marker.line.width`. A value of 1 (default) gives a head about 3x as wide as the line.", + "dflt": 1, "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='table'))" + "min": 0.3, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_arrowsize=<VALUE>, selector=dict(type='quiver'))" }, - "editType": "calc", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this table trace .", - "dflt": 0, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='table'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='quiver'))" }, - "x": { - "description": "Sets the horizontal domain of this table trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='table'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='quiver'))" }, - "y": { - "description": "Sets the vertical domain of this table trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='table'))" + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='table'))" - }, - "cells": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans two or more lines (i.e. `text` contains one or more
    HTML tags) or if an explicit width is set to override the text width.", - "dflt": "center", + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(cells_align=<VALUE>, selector=dict(type='table'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "fill": { - "color": { - "arrayOk": true, - "description": "Sets the cell fill color. It accepts either a specific color or an array of colors or a 2D array of colors.", - "dflt": "white", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(cells_fill_color=<VALUE>, selector=dict(type='table'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='quiver'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='quiver'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='quiver'))" }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='quiver'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(cells_fill=dict(...), selector=dict(type='table'))" + "valType": "color", + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='quiver'))" }, - "font": { - "color": { - "arrayOk": true, - "editType": "calc", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='quiver'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(cells_font_color=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='quiver'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='quiver'))" }, - "description": "", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(cells_font_family=<VALUE>, selector=dict(type='table'))" + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='quiver'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='quiver'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(cells_font_lineposition=<VALUE>, selector=dict(type='table'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(cells_font_shadow=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='quiver'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='quiver'))" }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(cells_font_size=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='quiver'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "italic" + "fraction", + "pixels" ], - "magic_underscores": "fig.update_traces(cells_font_style=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='quiver'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='quiver'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='quiver'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "h", + "v" ], - "magic_underscores": "fig.update_traces(cells_font_textcase=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='quiver'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='quiver'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='quiver'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='quiver'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(cells_font_variant=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='quiver'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='quiver'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(cells_font_weight=<VALUE>, selector=dict(type='table'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(cells_font=dict(...), selector=dict(type='table'))" - }, - "format": { - "description": "Sets the cell value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(cells_format=<VALUE>, selector=dict(type='table'))" - }, - "formatsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `format`.", - "editType": "none", - "valType": "string" - }, - "height": { - "description": "The height of cells.", - "dflt": 20, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(cells_height=<VALUE>, selector=dict(type='table'))" - }, - "line": { - "color": { - "arrayOk": true, - "dflt": "grey", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(cells_line_color=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='quiver'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='quiver'))" }, - "editType": "calc", - "role": "object", - "width": { - "arrayOk": true, - "dflt": 1, - "editType": "calc", + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(cells_line_width=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='quiver'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(cells_line=dict(...), selector=dict(type='table'))" - }, - "prefix": { - "arrayOk": true, - "description": "Prefix for cell values.", - "dflt": null, - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(cells_prefix=<VALUE>, selector=dict(type='table'))" - }, - "prefixsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `prefix`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "suffix": { - "arrayOk": true, - "description": "Suffix for cell values.", - "dflt": null, - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(cells_suffix=<VALUE>, selector=dict(type='table'))" - }, - "suffixsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `suffix`.", - "editType": "none", - "valType": "string" - }, - "values": { - "description": "Cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(cells_values=<VALUE>, selector=dict(type='table'))" - }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(cells=dict(...), selector=dict(type='table'))" - }, - "header": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans two or more lines (i.e. `text` contains one or more
    HTML tags) or if an explicit width is set to override the text width.", - "dflt": "center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(header_align=<VALUE>, selector=dict(type='table'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "fill": { - "color": { - "arrayOk": true, - "description": "Sets the cell fill color. It accepts either a specific color or an array of colors or a 2D array of colors.", - "dflt": "white", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(header_fill_color=<VALUE>, selector=dict(type='table'))" + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='quiver'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='quiver'))" }, - "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(header_fill=dict(...), selector=dict(type='table'))" - }, - "font": { - "color": { - "arrayOk": true, - "editType": "calc", + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(header_font_color=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='quiver'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='quiver'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='quiver'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='quiver'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='quiver'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='quiver'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='quiver'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='quiver'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='quiver'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='quiver'))" }, - "description": "", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(header_font_family=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='quiver'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='quiver'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(header_font_lineposition=<VALUE>, selector=dict(type='table'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='quiver'))" }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(header_font_shadow=<VALUE>, selector=dict(type='table'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='quiver'))" }, - "size": { - "arrayOk": true, - "editType": "calc", + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(header_font_size=<VALUE>, selector=dict(type='table'))" + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='quiver'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='quiver'))" }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, "valType": "enumerated", "values": [ - "normal", - "italic" + "auto", + "linear", + "array" ], - "magic_underscores": "fig.update_traces(header_font_style=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='quiver'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='quiver'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "outside", + "inside", + "" ], - "magic_underscores": "fig.update_traces(header_font_textcase=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='quiver'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='quiver'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='quiver'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='quiver'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='quiver'))" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='quiver'))" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='quiver'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='quiver'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='quiver'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='quiver'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='quiver'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='quiver'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='quiver'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='quiver'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='quiver'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='quiver'))" + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='quiver'))" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "left", + "center", + "right" ], - "magic_underscores": "fig.update_traces(header_font_variant=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='quiver'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='quiver'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(header_font_weight=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='quiver'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(header_font=dict(...), selector=dict(type='table'))" - }, - "format": { - "description": "Sets the cell value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(header_format=<VALUE>, selector=dict(type='table'))" - }, - "formatsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `format`.", - "editType": "none", - "valType": "string" + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='quiver'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='quiver'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='quiver'))" }, - "height": { - "description": "The height of cells.", - "dflt": 28, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(header_height=<VALUE>, selector=dict(type='table'))" + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='quiver'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='quiver'))" }, + "editType": "calc", "line": { - "color": { - "arrayOk": true, - "dflt": "grey", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(header_line_color=<VALUE>, selector=dict(type='table'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='quiver'))" }, - "editType": "calc", + "editType": "style", "role": "object", "width": { - "arrayOk": true, - "dflt": 1, - "editType": "calc", + "description": "Sets the width (in px) of the arrow lines.", + "dflt": 2, + "editType": "style", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(header_line_width=<VALUE>, selector=dict(type='table'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(header_line=dict(...), selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='quiver'))" }, - "prefix": { + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='quiver'))" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='quiver'))" + }, + "textfont": { + "color": { "arrayOk": true, - "description": "Prefix for cell values.", - "dflt": null, + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='quiver'))" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "calc", + "noBlank": true, + "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(header_prefix=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='quiver'))" }, - "prefixsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `prefix`.", - "editType": "none", - "valType": "string" + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='quiver'))" }, "role": "object", - "suffix": { + "shadow": { "arrayOk": true, - "description": "Suffix for cell values.", - "dflt": null, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(header_suffix=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='quiver'))" }, - "suffixsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `suffix`.", - "editType": "none", - "valType": "string" + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='quiver'))" }, - "values": { - "description": "Header cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.", - "dflt": [], + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(header_values=<VALUE>, selector=dict(type='table'))" + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='quiver'))" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(header=dict(...), selector=dict(type='table'))" + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='quiver'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='quiver'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='quiver'))" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='quiver'))" + }, + "editType": "style", + "line": { + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of selected points.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(selected_marker_line_width=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(selected_marker_line=dict(...), selector=dict(type='quiver'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='quiver'))" + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points, applied only when a selection exists.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_textfont_color=<VALUE>, selector=dict(type='quiver'))" + }, + "editType": "style", + "role": "object", + "magic_underscores": "fig.update_traces(selected_textfont=dict(...), selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='quiver'))" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='quiver'))" + }, + "editType": "style", + "line": { + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_line_width=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(unselected_marker_line=dict(...), selector=dict(type='quiver'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='quiver'))" + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_textfont_color=<VALUE>, selector=dict(type='quiver'))" + }, + "editType": "style", + "role": "object", + "magic_underscores": "fig.update_traces(unselected_textfont=dict(...), selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='quiver'))" + }, + "anchor": { + "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *center* to center the arrow on (x,y).", + "dflt": "tail", + "editType": "calc", + "valType": "enumerated", + "values": [ + "tip", + "tail", + "center" + ], + "magic_underscores": "fig.update_traces(anchor=<VALUE>, selector=dict(type='quiver'))" }, "hoverlabel": { "align": { @@ -33636,36 +31730,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='table'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='quiver'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='table'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='quiver'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='table'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='quiver'))" }, "editType": "none", "font": { @@ -33673,12 +31752,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='table'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='quiver'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -33689,12 +31763,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='table'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='quiver'))" }, "lineposition": { "arrayOk": true, @@ -33710,12 +31779,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='table'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='quiver'))" }, "role": "object", "shadow": { @@ -33724,24 +31788,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='table'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='quiver'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='table'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='quiver'))" }, "style": { "arrayOk": true, @@ -33753,12 +31807,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='table'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='quiver'))" }, "textcase": { "arrayOk": true, @@ -33772,12 +31821,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='table'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='quiver'))" }, "variant": { "arrayOk": true, @@ -33793,12 +31837,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='table'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='quiver'))" }, "weight": { "arrayOk": true, @@ -33812,14 +31851,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='table'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='quiver'))" }, "namelength": { "arrayOk": true, @@ -33828,12 +31862,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='table'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='quiver'))" }, "role": "object", "showarrow": { @@ -33841,64 +31870,75 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='quiver'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='table'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='table'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='quiver'))" }, - "stream": { + "sizemode": { + "description": "Determines whether arrows are drawn according to their raw lengths, or scaled based on the maximum vector length and point density. Note: When `anglemode` is *data* arrows are alwyas scaled and `sizemode` *raw* is ignored.", + "dflt": "scaled", "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='table'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='table'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='table'))" + "valType": "enumerated", + "values": [ + "scaled", + "raw" + ], + "magic_underscores": "fig.update_traces(sizemode=<VALUE>, selector=dict(type='quiver'))" }, - "editType": "calc", - "magic_underscores": "fig.update_traces(..., selector=dict(type='table'))" + "sizeref": { + "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled* (`sizeref` is applied after scaling).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(sizeref=<VALUE>, selector=dict(type='quiver'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='quiver'))" + }, + "anglemode": { + "description": "Sets the mode used to determine the angle of the arrow vectors. If *paper*, u/v are interpreted in pixel coordinates and the rendered vector angle does not change regardless of the axes scales. If *data*, u/v are interpreted in data coordinates and the rendered vector angle may change, e.g. if zooming in along a single axis", + "dflt": "axis", + "editType": "calc", + "valType": "enumerated", + "values": [ + "paper", + "data" + ], + "magic_underscores": "fig.update_traces(anglemode=<VALUE>, selector=dict(type='quiver'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='quiver'))" }, "categories": [ - "noOpacity" + "cartesian", + "svg", + "showLegend", + "scatter-like", + "zoomScale" ], "meta": { - "description": "Table view for detailed data viewing. The data are arranged in a grid of rows and columns. Most styling can be specified for columns, rows or individual cells. Table is using a column-major order, ie. the grid is represented as a vector of column vectors." + "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." }, - "type": "table" + "type": "quiver" }, - "box": { + "table": { "animatable": false, "attributes": { - "type": "box", + "type": "table", "name": { - "description": "Sets the trace name. The trace name appears 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", - "editType": "calc+clearAxisTypes", + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='table'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='table'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -33910,35 +31950,21 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='box'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='table'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='table'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='box'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='table'))" }, "legendgrouptitle": { "editType": "style", @@ -33946,7 +31972,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='table'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -33956,7 +31982,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='table'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -33971,7 +31997,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='table'))" }, "role": "object", "shadow": { @@ -33979,13 +32005,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='table'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='table'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -33996,7 +32022,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='table'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -34009,7 +32035,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='table'))" }, "variant": { "description": "Sets the variant of the font.", @@ -34024,7 +32050,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='table'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -34037,9 +32063,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='table'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='table'))" }, "role": "object", "text": { @@ -34047,127 +32073,40 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='table'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='table'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='box'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='table'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='box'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='box'))" - }, - "x": { - "description": "Sets the x sample data or coordinates. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='box'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "x0": { - "description": "Sets the x coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='table'))" }, - "dx": { - "description": "Sets the x coordinate step for multi-box traces set using q1/median/q3.", + "columnorder": { + "description": "Specifies the rendered order of the data columns; for example, a value `2` at position `0` means that column index `0` in the data will be rendered as the third column, as columns have an index base of zero.", "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='box'))" - }, - "y": { - "description": "Sets the y sample data or coordinates. See overview for more info.", - "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='box'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "y0": { - "description": "Sets the y coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='box'))" - }, - "dy": { - "description": "Sets the y coordinate step for multi-box traces set using q1/median/q3.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='box'))" - }, - "width": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(columnorder=<VALUE>, selector=dict(type='table'))" }, - "text": { + "columnwidth": { "arrayOk": true, - "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.", - "dflt": "", + "description": "The width of columns expressed as a ratio. Columns fill the available width in proportion of their specified column widths.", + "dflt": null, "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='box'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='box'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "valType": "number", + "magic_underscores": "fig.update_traces(columnwidth=<VALUE>, selector=dict(type='table'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -34183,1067 +32122,731 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='box'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='box'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='box'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='box'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='table'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='box'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='table'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='box'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='box'))" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='box'))" - }, - "orientation": { - "description": "Sets the orientation of the box(es). If *v* (*h*), the distribution is visualized along the vertical (horizontal).", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "v", - "h" - ], - "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='box'))" - }, - "alignmentgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='box'))" - }, - "offsetgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='box'))" - }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='box'))" - }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='box'))" - }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='box'))" - }, - "yperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='box'))" - }, - "yperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='table'))" }, - "yperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this table trace.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='table'))" + }, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='box'))" - }, - "marker": { - "angle": { - "arrayOk": false, - "description": "Sets the marker angle in respect to `angleref`.", + "role": "object", + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this table trace.", "dflt": 0, "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='box'))" + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='table'))" }, - "color": { - "arrayOk": false, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='box'))" + "x": { + "description": "Sets the horizontal domain of this table trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='table'))" }, - "editType": "plot", - "line": { + "y": { + "description": "Sets the vertical domain of this table trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='table'))" + }, + "cells": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans two or more lines (i.e. `text` contains one or more
    HTML tags) or if an explicit width is set to override the text width.", + "dflt": "center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(cells_align=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "fill": { "color": { - "arrayOk": false, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "dflt": "#444", - "editType": "style", + "arrayOk": true, + "description": "Sets the cell fill color. It accepts either a specific color or an array of colors or a 2D array of colors.", + "dflt": "white", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(cells_fill_color=<VALUE>, selector=dict(type='table'))" }, - "editType": "style", - "outliercolor": { - "description": "Sets the border line color of the outlier sample points. Defaults to marker.color", - "editType": "style", + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(cells_fill=dict(...), selector=dict(type='table'))" + }, + "font": { + "color": { + "arrayOk": true, + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_outliercolor=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(cells_font_color=<VALUE>, selector=dict(type='table'))" }, - "outlierwidth": { - "description": "Sets the border line width (in px) of the outlier sample points.", - "dflt": 1, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_outlierwidth=<VALUE>, selector=dict(type='box'))" + "description": "", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(cells_font_family=<VALUE>, selector=dict(type='table'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(cells_font_lineposition=<VALUE>, selector=dict(type='table'))" }, "role": "object", - "width": { - "arrayOk": false, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "dflt": 0, - "editType": "style", - "min": 0, + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(cells_font_shadow=<VALUE>, selector=dict(type='table'))" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(cells_font_size=<VALUE>, selector=dict(type='table'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='box'))" - }, - "opacity": { - "arrayOk": false, - "description": "Sets the marker opacity.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='box'))" - }, - "outliercolor": { - "description": "Sets the color of the outlier sample points.", - "dflt": "rgba(0, 0, 0, 0)", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_outliercolor=<VALUE>, selector=dict(type='box'))" - }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(cells_font_style=<VALUE>, selector=dict(type='table'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(cells_font_textcase=<VALUE>, selector=dict(type='table'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(cells_font_variant=<VALUE>, selector=dict(type='table'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(cells_font_weight=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(cells_font=dict(...), selector=dict(type='table'))" + }, + "format": { + "description": "Sets the cell value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(cells_format=<VALUE>, selector=dict(type='table'))" + }, + "height": { + "description": "The height of cells.", + "dflt": 20, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(cells_height=<VALUE>, selector=dict(type='table'))" + }, + "line": { + "color": { + "arrayOk": true, + "dflt": "grey", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(cells_line_color=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "role": "object", + "width": { + "arrayOk": true, + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(cells_line_width=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(cells_line=dict(...), selector=dict(type='table'))" + }, + "prefix": { + "arrayOk": true, + "description": "Prefix for cell values.", + "dflt": null, + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(cells_prefix=<VALUE>, selector=dict(type='table'))" + }, "role": "object", - "size": { - "arrayOk": false, - "description": "Sets the marker size (in px).", - "dflt": 6, + "suffix": { + "arrayOk": true, + "description": "Suffix for cell values.", + "dflt": null, + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(cells_suffix=<VALUE>, selector=dict(type='table'))" + }, + "values": { + "description": "Cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(cells_values=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(cells=dict(...), selector=dict(type='table'))" + }, + "header": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans two or more lines (i.e. `text` contains one or more
    HTML tags) or if an explicit width is set to override the text width.", + "dflt": "center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(header_align=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "fill": { + "color": { + "arrayOk": true, + "description": "Sets the cell fill color. It accepts either a specific color or an array of colors or a 2D array of colors.", + "dflt": "white", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(header_fill_color=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(header_fill=dict(...), selector=dict(type='table'))" + }, + "font": { + "color": { + "arrayOk": true, + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(header_font_color=<VALUE>, selector=dict(type='table'))" + }, + "description": "", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(header_font_family=<VALUE>, selector=dict(type='table'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(header_font_lineposition=<VALUE>, selector=dict(type='table'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(header_font_shadow=<VALUE>, selector=dict(type='table'))" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(header_font_size=<VALUE>, selector=dict(type='table'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(header_font_style=<VALUE>, selector=dict(type='table'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(header_font_textcase=<VALUE>, selector=dict(type='table'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(header_font_variant=<VALUE>, selector=dict(type='table'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(header_font_weight=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(header_font=dict(...), selector=dict(type='table'))" + }, + "format": { + "description": "Sets the cell value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(header_format=<VALUE>, selector=dict(type='table'))" + }, + "height": { + "description": "The height of cells.", + "dflt": 28, "editType": "calc", - "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(header_height=<VALUE>, selector=dict(type='table'))" }, - "symbol": { - "arrayOk": false, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "plot", + "line": { + "color": { + "arrayOk": true, + "dflt": "grey", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(header_line_color=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "role": "object", + "width": { + "arrayOk": true, + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(header_line_width=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(header_line=dict(...), selector=dict(type='table'))" + }, + "prefix": { + "arrayOk": true, + "description": "Prefix for cell values.", + "dflt": null, + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(header_prefix=<VALUE>, selector=dict(type='table'))" + }, + "role": "object", + "suffix": { + "arrayOk": true, + "description": "Suffix for cell values.", + "dflt": null, + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(header_suffix=<VALUE>, selector=dict(type='table'))" + }, + "values": { + "description": "Header cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(header_values=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(header=dict(...), selector=dict(type='table'))" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", "valType": "enumerated", "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" + "left", + "right", + "auto" ], - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='table'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='box'))" - }, - "line": { - "color": { - "description": "Sets the color of line bounding the box(es).", - "editType": "style", + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='table'))" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='table'))" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='table'))" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='table'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='table'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='table'))" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='table'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='table'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='table'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='table'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='table'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='table'))" + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='table'))" }, - "editType": "plot", "role": "object", - "width": { - "description": "Sets the width (in px) of line bounding the box(es).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='box'))" + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='table'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='table'))" }, - "boxmean": { - "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. Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='table'))" + }, + "editType": "calc", + "magic_underscores": "fig.update_traces(..., selector=dict(type='table'))" + }, + "categories": [ + "noOpacity" + ], + "meta": { + "description": "Table view for detailed data viewing. The data are arranged in a grid of rows and columns. Most styling can be specified for columns, rows or individual cells. Table is using a column-major order, ie. the grid is represented as a vector of column vectors." + }, + "type": "table" + }, + "box": { + "animatable": false, + "attributes": { + "type": "box", + "name": { + "description": "Sets the trace name. The trace name appears 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", + "editType": "calc+clearAxisTypes", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='box'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='box'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, "editType": "calc", "valType": "enumerated", "values": [ true, - "sd", - false + false, + "legendonly" ], - "magic_underscores": "fig.update_traces(boxmean=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='box'))" }, - "boxpoints": { - "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 Defaults to *suspectedoutliers* when `marker.outliercolor` or `marker.line.outliercolor` is set. Defaults to *all* under the q1/median/q3 signature. Otherwise defaults to *outliers*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "outliers", - "suspectedoutliers", - false - ], - "magic_underscores": "fig.update_traces(boxpoints=<VALUE>, selector=dict(type='box'))" - }, - "notched": { - "description": "Determines whether or not notches are drawn. Notches displays a confidence interval around the median. We compute the confidence interval as median +/- 1.57 * IQR / sqrt(N), where IQR is the interquartile range and N is the sample size. If two boxes' notches do not overlap there is 95% confidence their medians differ. See https://sites.google.com/site/davidsstatistics/home/notched-box-plots for more info. Defaults to *false* unless `notchwidth` or `notchspan` is set.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(notched=<VALUE>, selector=dict(type='box'))" - }, - "notchwidth": { - "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).", - "dflt": 0.25, - "editType": "calc", - "max": 0.5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(notchwidth=<VALUE>, selector=dict(type='box'))" - }, - "showwhiskers": { - "description": "Determines whether or not whiskers are visible. Defaults to true for `sizemode` *quartiles*, false for *sd*.", - "editType": "calc", + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showwhiskers=<VALUE>, selector=dict(type='box'))" - }, - "whiskerwidth": { - "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).", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(whiskerwidth=<VALUE>, selector=dict(type='box'))" - }, - "q1": { - "description": "Sets the Quartile 1 values. There should be as many items as the number of boxes desired.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(q1=<VALUE>, selector=dict(type='box'))" - }, - "median": { - "description": "Sets the median values. There should be as many items as the number of boxes desired.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(median=<VALUE>, selector=dict(type='box'))" - }, - "q3": { - "description": "Sets the Quartile 3 values. There should be as many items as the number of boxes desired.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(q3=<VALUE>, selector=dict(type='box'))" - }, - "lowerfence": { - "description": "Sets the lower fence values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `lowerfence` is not provided but a sample (in `y` or `x`) is set, we compute the lower as the last sample point below 1.5 times the IQR.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(lowerfence=<VALUE>, selector=dict(type='box'))" - }, - "upperfence": { - "description": "Sets the upper fence values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `upperfence` is not provided but a sample (in `y` or `x`) is set, we compute the upper as the last sample point above 1.5 times the IQR.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(upperfence=<VALUE>, selector=dict(type='box'))" - }, - "notchspan": { - "description": "Sets the notch span from the boxes' `median` values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `notchspan` is not provided but a sample (in `y` or `x`) is set, we compute it as 1.57 * IQR / sqrt(N), where N is the sample size.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(notchspan=<VALUE>, selector=dict(type='box'))" - }, - "mean": { - "description": "Sets the mean values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `mean` is not provided but a sample (in `y` or `x`) is set, we compute the mean for each box using the sample values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(mean=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='box'))" }, - "sd": { - "description": "Sets the standard deviation values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `sd` is not provided but a sample (in `y` or `x`) is set, we compute the standard deviation for each box using the sample values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(sd=<VALUE>, selector=dict(type='box'))" + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='box'))" }, - "sdmultiple": { - "description": "Scales the box size when sizemode=sd Allowing boxes to be drawn across any stddev range For example 1-stddev, 3-stddev, 5-stddev", - "dflt": 1, - "editType": "calc", - "min": 0, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(sdmultiple=<VALUE>, selector=dict(type='box'))" - }, - "quartilemethod": { - "description": "Sets the method used to compute the sample's Q1 and Q3 quartiles. The *linear* method uses the 25th percentile for Q1 and 75th percentile for Q3 as computed using method #10 (listed on http://jse.amstat.org/v14n3/langford.html). The *exclusive* method uses the median to divide the ordered dataset into two halves if the sample is odd, it does not include the median in either half - Q1 is then the median of the lower half and Q3 the median of the upper half. The *inclusive* method also uses the median to divide the ordered dataset into two halves but if the sample is odd, it includes the median in both halves - Q1 is then the median of the lower half and Q3 the median of the upper half.", - "dflt": "linear", - "editType": "calc", - "valType": "enumerated", - "values": [ - "linear", - "exclusive", - "inclusive" - ], - "magic_underscores": "fig.update_traces(quartilemethod=<VALUE>, selector=dict(type='box'))" - }, - "q1src": { - "description": "Sets the source reference on Chart Studio Cloud for `q1`.", - "editType": "none", - "valType": "string" - }, - "mediansrc": { - "description": "Sets the source reference on Chart Studio Cloud for `median`.", - "editType": "none", - "valType": "string" - }, - "q3src": { - "description": "Sets the source reference on Chart Studio Cloud for `q3`.", - "editType": "none", - "valType": "string" - }, - "lowerfencesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lowerfence`.", - "editType": "none", - "valType": "string" - }, - "upperfencesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `upperfence`.", - "editType": "none", - "valType": "string" - }, - "notchspansrc": { - "description": "Sets the source reference on Chart Studio Cloud for `notchspan`.", - "editType": "none", - "valType": "string" - }, - "meansrc": { - "description": "Sets the source reference on Chart Studio Cloud for `mean`.", - "editType": "none", - "valType": "string" - }, - "sdsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `sd`.", - "editType": "none", - "valType": "string" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='box'))" }, - "selected": { + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='box'))" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='box'))" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='box'))" - }, - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='box'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='box'))" + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='box'))" }, - "unselected": { + "legendgrouptitle": { "editType": "style", - "marker": { + "font": { "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='box'))" }, + "description": "Sets this legend group's title font.", "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='box'))" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='box'))" - }, - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='box'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='box'))" - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='box'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='box'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='box'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='box'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='box'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", + "editType": "style", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='box'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='box'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "none", + "editType": "style", "extras": [ "none" ], @@ -35253,61 +32856,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='box'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='box'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "none", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='box'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='box'))" }, "size": { - "arrayOk": true, - "editType": "none", + "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='box'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='box'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "none", + "editType": "style", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='box'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='box'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "none", + "editType": "style", "valType": "enumerated", "values": [ "normal", @@ -35315,18 +32894,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='box'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='box'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "none", + "editType": "style", "valType": "enumerated", "values": [ "normal", @@ -35336,18 +32909,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='box'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='box'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "none", + "editType": "style", "extras": [ "normal", "bold" @@ -35355,442 +32922,92 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='box'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='box'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='box'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='box'))" }, "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='box'))" + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='box'))" }, - "hoveron": { - "description": "Do the hover effects highlight individual boxes or sample points or both?", - "dflt": "boxes+points", + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", - "flags": [ - "boxes", - "points" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoveron=<VALUE>, selector=dict(type='box'))" - }, - "pointpos": { - "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", - "editType": "calc", - "max": 2, - "min": -2, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(pointpos=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='box'))" }, - "jitter": { - "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).", - "editType": "calc", + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(jitter=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='box'))" }, - "sizemode": { - "description": "Sets the upper and lower bound for the boxes quartiles means box is drawn between Q1 and Q3 SD means the box is drawn between Mean +- Standard Deviation Argument sdmultiple (default 1) to scale the box size So it could be drawn 1-stddev, 3-stddev etc", - "dflt": "quartiles", + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", - "valType": "enumerated", - "values": [ - "quartiles", - "sd" - ], - "magic_underscores": "fig.update_traces(sizemode=<VALUE>, selector=dict(type='box'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='box'))" }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='box'))" + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer", + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='box'))" }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='box'))" + "x": { + "description": "Sets the x sample data or coordinates. See overview for more info.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='box'))" }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", + "x0": { + "description": "Sets the x coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", + "editType": "calc+clearAxisTypes", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='box'))" + "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='box'))" }, - "stream": { + "dx": { + "description": "Sets the x coordinate step for multi-box traces set using q1/median/q3.", "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='box'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='box'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='box'))" + "valType": "number", + "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='box'))" - }, - "categories": [ - "cartesian", - "svg", - "symbols", - "oriented", - "box-violin", - "showLegend", - "boxLayout", - "zoomScale" - ], - "layoutAttributes": { - "boxgap": { - "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates. Has no effect on traces that have *width* set.", - "dflt": 0.3, + "y": { + "description": "Sets the y sample data or coordinates. See overview for more info.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='box'))" + }, + "y0": { + "description": "Sets the y coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='box'))" + }, + "dy": { + "description": "Sets the y coordinate step for multi-box traces set using q1/median/q3.", "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" + "valType": "number", + "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='box'))" }, - "boxgroupgap": { - "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate. Has no effect on traces that have *width* set.", - "dflt": 0.3, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "boxmode": { - "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.", - "dflt": "overlay", - "editType": "calc", - "valType": "enumerated", - "values": [ - "group", - "overlay" - ] - } - }, - "meta": { - "description": "Each box spans from quartile 1 (Q1) to quartile 3 (Q3). The second quartile (Q2, i.e. the median) is marked by a line inside the box. The fences grow outward from the boxes' edges, by default they span +/- 1.5 times the interquartile range (IQR: Q3-Q1), The sample mean and standard deviation as well as notches and the sample, outlier and suspected outliers points can be optionally added to the box plot. The values and positions corresponding to each boxes can be input using two signatures. The first signature expects users to supply the sample values in the `y` data array for vertical boxes (`x` for horizontal boxes). 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. In this case, the box is positioned with the trace `name` or with `x0` (`y0`) if provided. The second signature expects users to supply the boxes corresponding Q1, median and Q3 statistics in the `q1`, `median` and `q3` data arrays respectively. Other box features relying on statistics namely `lowerfence`, `upperfence`, `notchspan` can be set directly by the users. To have plotly compute them or to show sample points besides the boxes, users can set the `y` data array for vertical boxes (`x` for horizontal boxes) to a 2D array with the outer length corresponding to the number of boxes in the traces and the inner length corresponding the sample size." - }, - "type": "box" - }, - "violin": { - "animatable": false, - "attributes": { - "type": "violin", - "name": { - "description": "Sets the trace name. The trace name appears 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).", - "editType": "calc+clearAxisTypes", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='violin'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='violin'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='violin'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='violin'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='violin'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='violin'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='violin'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='violin'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='violin'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='violin'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='violin'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='violin'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='violin'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='violin'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='violin'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='violin'))" - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='violin'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='violin'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='violin'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='violin'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='violin'))" - }, - "x": { - "description": "Sets the x sample data or coordinates. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='violin'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "x0": { - "description": "Sets the x coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='violin'))" - }, - "y": { - "description": "Sets the y sample data or coordinates. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='violin'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "y0": { - "description": "Sets the y coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='violin'))" - }, - "width": { - "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.", - "dflt": 0, + "width": { + "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.", + "dflt": 0, "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='box'))" }, "text": { "arrayOk": true, @@ -35798,12 +33015,7 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='violin'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='box'))" }, "hovertext": { "arrayOk": true, @@ -35811,16 +33023,11 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='violin'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='box'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -35836,12 +33043,7 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='violin'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='box'))" }, "hovertemplate": { "arrayOk": true, @@ -35849,94 +33051,129 @@ "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='box'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='violin'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='box'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='box'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='box'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='violin'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='box'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='violin'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='box'))" }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='box'))" }, "yaxis": { "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", "dflt": "y", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='box'))" }, "orientation": { - "description": "Sets the orientation of the violin(s). If *v* (*h*), the distribution is visualized along the vertical (horizontal).", + "description": "Sets the orientation of the box(es). If *v* (*h*), the distribution is visualized along the vertical (horizontal).", "editType": "calc+clearAxisTypes", "valType": "enumerated", "values": [ "v", "h" ], - "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='box'))" }, "alignmentgroup": { "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='box'))" }, "offsetgroup": { "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='box'))" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='box'))" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='box'))" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='box'))" + }, + "yperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='box'))" + }, + "yperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='box'))" + }, + "yperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='box'))" }, "marker": { "angle": { @@ -35945,14 +33182,14 @@ "dflt": 0, "editType": "calc", "valType": "angle", - "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='box'))" }, "color": { "arrayOk": false, "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='box'))" }, "editType": "plot", "line": { @@ -35962,14 +33199,14 @@ "dflt": "#444", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='box'))" }, "editType": "style", "outliercolor": { "description": "Sets the border line color of the outlier sample points. Defaults to marker.color", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_outliercolor=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_line_outliercolor=<VALUE>, selector=dict(type='box'))" }, "outlierwidth": { "description": "Sets the border line width (in px) of the outlier sample points.", @@ -35977,7 +33214,7 @@ "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_outlierwidth=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_line_outlierwidth=<VALUE>, selector=dict(type='box'))" }, "role": "object", "width": { @@ -35987,9 +33224,9 @@ "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='box'))" }, "opacity": { "arrayOk": false, @@ -35999,14 +33236,14 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='box'))" }, "outliercolor": { "description": "Sets the color of the outlier sample points.", "dflt": "rgba(0, 0, 0, 0)", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_outliercolor=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_outliercolor=<VALUE>, selector=dict(type='box'))" }, "role": "object", "size": { @@ -36016,7 +33253,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='box'))" }, "symbol": { "arrayOk": false, @@ -36512,166 +33749,223 @@ "154", "arrow-wide-open" ], - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='box'))" }, "line": { "color": { - "description": "Sets the color of line bounding the violin(s).", + "description": "Sets the color of line bounding the box(es).", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='box'))" }, "editType": "plot", "role": "object", "width": { - "description": "Sets the width (in px) of line bounding the violin(s).", + "description": "Sets the width (in px) of line bounding the box(es).", "dflt": 2, "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='box'))" }, - "box": { - "editType": "plot", - "fillcolor": { - "description": "Sets the inner box plot fill color.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(box_fillcolor=<VALUE>, selector=dict(type='violin'))" - }, - "line": { - "color": { - "description": "Sets the inner box plot bounding line color.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(box_line_color=<VALUE>, selector=dict(type='violin'))" - }, - "editType": "style", - "role": "object", - "width": { - "description": "Sets the inner box plot bounding line width.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(box_line_width=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(box_line=dict(...), selector=dict(type='violin'))" - }, - "role": "object", - "visible": { - "description": "Determines if an miniature box plot is drawn inside the violins. ", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(box_visible=<VALUE>, selector=dict(type='violin'))" - }, - "width": { - "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.", - "dflt": 0.25, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(box_width=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(box=dict(...), selector=dict(type='violin'))" + "boxmean": { + "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. Defaults to *true* when `mean` is set. Defaults to *sd* when `sd` is set Otherwise defaults to *false*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + "sd", + false + ], + "magic_underscores": "fig.update_traces(boxmean=<VALUE>, selector=dict(type='box'))" }, - "quartilemethod": { - "description": "Sets the method used to compute the sample's Q1 and Q3 quartiles. The *linear* method uses the 25th percentile for Q1 and 75th percentile for Q3 as computed using method #10 (listed on http://jse.amstat.org/v14n3/langford.html). The *exclusive* method uses the median to divide the ordered dataset into two halves if the sample is odd, it does not include the median in either half - Q1 is then the median of the lower half and Q3 the median of the upper half. The *inclusive* method also uses the median to divide the ordered dataset into two halves but if the sample is odd, it includes the median in both halves - Q1 is then the median of the lower half and Q3 the median of the upper half.", - "dflt": "linear", + "boxpoints": { + "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 Defaults to *suspectedoutliers* when `marker.outliercolor` or `marker.line.outliercolor` is set. Defaults to *all* under the q1/median/q3 signature. Otherwise defaults to *outliers*.", "editType": "calc", "valType": "enumerated", "values": [ - "linear", - "exclusive", - "inclusive" + "all", + "outliers", + "suspectedoutliers", + false ], - "magic_underscores": "fig.update_traces(quartilemethod=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(boxpoints=<VALUE>, selector=dict(type='box'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "notched": { + "description": "Determines whether or not notches are drawn. Notches displays a confidence interval around the median. We compute the confidence interval as median +/- 1.57 * IQR / sqrt(N), where IQR is the interquartile range and N is the sample size. If two boxes' notches do not overlap there is 95% confidence their medians differ. See https://sites.google.com/site/davidsstatistics/home/notched-box-plots for more info. Defaults to *false* unless `notchwidth` or `notchspan` is set.", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='violin'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(notched=<VALUE>, selector=dict(type='box'))" }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='violin'))" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='violin'))" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='violin'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='violin'))" + "notchwidth": { + "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).", + "dflt": 0.25, + "editType": "calc", + "max": 0.5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(notchwidth=<VALUE>, selector=dict(type='box'))" }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='violin'))" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "showwhiskers": { + "description": "Determines whether or not whiskers are visible. Defaults to true for `sizemode` *quartiles*, false for *sd*.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showwhiskers=<VALUE>, selector=dict(type='box'))" + }, + "whiskerwidth": { + "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).", + "dflt": 0.5, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(whiskerwidth=<VALUE>, selector=dict(type='box'))" + }, + "q1": { + "description": "Sets the Quartile 1 values. There should be as many items as the number of boxes desired.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(q1=<VALUE>, selector=dict(type='box'))" + }, + "median": { + "description": "Sets the median values. There should be as many items as the number of boxes desired.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(median=<VALUE>, selector=dict(type='box'))" + }, + "q3": { + "description": "Sets the Quartile 3 values. There should be as many items as the number of boxes desired.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(q3=<VALUE>, selector=dict(type='box'))" + }, + "lowerfence": { + "description": "Sets the lower fence values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `lowerfence` is not provided but a sample (in `y` or `x`) is set, we compute the lower as the last sample point below 1.5 times the IQR.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(lowerfence=<VALUE>, selector=dict(type='box'))" + }, + "upperfence": { + "description": "Sets the upper fence values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `upperfence` is not provided but a sample (in `y` or `x`) is set, we compute the upper as the last sample point above 1.5 times the IQR.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(upperfence=<VALUE>, selector=dict(type='box'))" + }, + "notchspan": { + "description": "Sets the notch span from the boxes' `median` values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `notchspan` is not provided but a sample (in `y` or `x`) is set, we compute it as 1.57 * IQR / sqrt(N), where N is the sample size.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(notchspan=<VALUE>, selector=dict(type='box'))" + }, + "mean": { + "description": "Sets the mean values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `mean` is not provided but a sample (in `y` or `x`) is set, we compute the mean for each box using the sample values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(mean=<VALUE>, selector=dict(type='box'))" + }, + "sd": { + "description": "Sets the standard deviation values. There should be as many items as the number of boxes desired. This attribute has effect only under the q1/median/q3 signature. If `sd` is not provided but a sample (in `y` or `x`) is set, we compute the standard deviation for each box using the sample values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(sd=<VALUE>, selector=dict(type='box'))" + }, + "sdmultiple": { + "description": "Scales the box size when sizemode=sd Allowing boxes to be drawn across any stddev range For example 1-stddev, 3-stddev, 5-stddev", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(sdmultiple=<VALUE>, selector=dict(type='box'))" + }, + "quartilemethod": { + "description": "Sets the method used to compute the sample's Q1 and Q3 quartiles. The *linear* method uses the 25th percentile for Q1 and 75th percentile for Q3 as computed using method #10 (listed on http://jse.amstat.org/v14n3/langford.html). The *exclusive* method uses the median to divide the ordered dataset into two halves if the sample is odd, it does not include the median in either half - Q1 is then the median of the lower half and Q3 the median of the upper half. The *inclusive* method also uses the median to divide the ordered dataset into two halves but if the sample is odd, it includes the median in both halves - Q1 is then the median of the lower half and Q3 the median of the upper half.", + "dflt": "linear", + "editType": "calc", + "valType": "enumerated", + "values": [ + "linear", + "exclusive", + "inclusive" + ], + "magic_underscores": "fig.update_traces(quartilemethod=<VALUE>, selector=dict(type='box'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='box'))" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='box'))" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", "editType": "style", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='box'))" }, "role": "object", "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "description": "Sets the marker size of selected points.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='box'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='box'))" }, - "bandwidth": { - "description": "Sets the bandwidth used to compute the kernel density estimate. By default, the bandwidth is determined by Silverman's rule of thumb.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(bandwidth=<VALUE>, selector=dict(type='violin'))" + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='box'))" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='box'))" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='box'))" + }, + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='box'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='box'))" }, "fillcolor": { "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='box'))" }, "hoverlabel": { "align": { @@ -36685,36 +33979,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='violin'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='box'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='violin'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='box'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='violin'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='box'))" }, "editType": "none", "font": { @@ -36722,12 +34001,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='violin'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='box'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -36738,12 +34012,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='violin'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='box'))" }, "lineposition": { "arrayOk": true, @@ -36759,12 +34028,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='violin'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='box'))" }, "role": "object", "shadow": { @@ -36773,24 +34037,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='violin'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='box'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='violin'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='box'))" }, "style": { "arrayOk": true, @@ -36802,12 +34056,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='violin'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='box'))" }, "textcase": { "arrayOk": true, @@ -36821,12 +34070,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='violin'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='box'))" }, "variant": { "arrayOk": true, @@ -36842,12 +34086,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='violin'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='box'))" }, "weight": { "arrayOk": true, @@ -36861,14 +34100,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='violin'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='box'))" }, "namelength": { "arrayOk": true, @@ -36877,12 +34111,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='violin'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='box'))" }, "role": "object", "showarrow": { @@ -36890,165 +34119,105 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='box'))" }, "hoveron": { - "description": "Do the hover effects highlight individual violins or sample points or the kernel density estimate or any combination of them?", - "dflt": "violins+points+kde", + "description": "Do the hover effects highlight individual boxes or sample points or both?", + "dflt": "boxes+points", "editType": "style", - "extras": [ - "all" - ], "flags": [ - "violins", - "points", - "kde" + "boxes", + "points" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoveron=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(hoveron=<VALUE>, selector=dict(type='box'))" }, "pointpos": { - "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.", + "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", "editType": "calc", "max": 2, "min": -2, "valType": "number", - "magic_underscores": "fig.update_traces(pointpos=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(pointpos=<VALUE>, selector=dict(type='box'))" }, "jitter": { - "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.", + "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).", "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(jitter=<VALUE>, selector=dict(type='violin'))" - }, - "meanline": { - "color": { - "description": "Sets the mean line color.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(meanline_color=<VALUE>, selector=dict(type='violin'))" - }, - "editType": "plot", - "role": "object", - "visible": { - "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.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(meanline_visible=<VALUE>, selector=dict(type='violin'))" - }, - "width": { - "description": "Sets the mean line width.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(meanline_width=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(meanline=dict(...), selector=dict(type='violin'))" - }, - "points": { - "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. Defaults to *suspectedoutliers* when `marker.outliercolor` or `marker.line.outliercolor` is set, otherwise defaults to *outliers*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "outliers", - "suspectedoutliers", - false - ], - "magic_underscores": "fig.update_traces(points=<VALUE>, selector=dict(type='violin'))" - }, - "scalegroup": { - "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", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(scalegroup=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(jitter=<VALUE>, selector=dict(type='box'))" }, - "scalemode": { - "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 making up each violin.", - "dflt": "width", + "sizemode": { + "description": "Sets the upper and lower bound for the boxes quartiles means box is drawn between Q1 and Q3 SD means the box is drawn between Mean +- Standard Deviation Argument sdmultiple (default 1) to scale the box size So it could be drawn 1-stddev, 3-stddev etc", + "dflt": "quartiles", "editType": "calc", "valType": "enumerated", "values": [ - "width", - "count" + "quartiles", + "sd" ], - "magic_underscores": "fig.update_traces(scalemode=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(sizemode=<VALUE>, selector=dict(type='box'))" }, - "side": { - "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*.", - "dflt": "both", + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", "editType": "calc", "valType": "enumerated", "values": [ - "both", - "positive", - "negative" - ], - "magic_underscores": "fig.update_traces(side=<VALUE>, selector=dict(type='violin'))" - }, - "span": { - "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*.", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(span=list(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='box'))" }, - "spanmode": { - "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.", - "dflt": "soft", + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", "editType": "calc", "valType": "enumerated", "values": [ - "soft", - "hard", - "manual" + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" ], - "magic_underscores": "fig.update_traces(spanmode=<VALUE>, selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='box'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='violin'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='violin'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='violin'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='box'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='violin'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='box'))" }, "categories": [ "cartesian", @@ -37057,28 +34226,28 @@ "oriented", "box-violin", "showLegend", - "violinLayout", + "boxLayout", "zoomScale" ], "layoutAttributes": { - "violingap": { - "description": "Sets the gap (in plot fraction) between violins of adjacent location coordinates. Has no effect on traces that have *width* set.", + "boxgap": { + "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates. Has no effect on traces that have *width* set.", "dflt": 0.3, "editType": "calc", "max": 1, "min": 0, "valType": "number" }, - "violingroupgap": { - "description": "Sets the gap (in plot fraction) between violins of the same location coordinate. Has no effect on traces that have *width* set.", + "boxgroupgap": { + "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate. Has no effect on traces that have *width* set.", "dflt": 0.3, "editType": "calc", "max": 1, "min": 0, "valType": "number" }, - "violinmode": { - "description": "Determines how violins at the same location coordinate are displayed on the graph. If *group*, the violins are plotted next to one another centered around the shared location. If *overlay*, the violins are plotted over one another, you might need to set *opacity* to see them multiple violins. Has no effect on traces that have *width* set.", + "boxmode": { + "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.", "dflt": "overlay", "editType": "calc", "valType": "enumerated", @@ -37089,25 +34258,25 @@ } }, "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." + "description": "Each box spans from quartile 1 (Q1) to quartile 3 (Q3). The second quartile (Q2, i.e. the median) is marked by a line inside the box. The fences grow outward from the boxes' edges, by default they span +/- 1.5 times the interquartile range (IQR: Q3-Q1), The sample mean and standard deviation as well as notches and the sample, outlier and suspected outliers points can be optionally added to the box plot. The values and positions corresponding to each boxes can be input using two signatures. The first signature expects users to supply the sample values in the `y` data array for vertical boxes (`x` for horizontal boxes). 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. In this case, the box is positioned with the trace `name` or with `x0` (`y0`) if provided. The second signature expects users to supply the boxes corresponding Q1, median and Q3 statistics in the `q1`, `median` and `q3` data arrays respectively. Other box features relying on statistics namely `lowerfence`, `upperfence`, `notchspan` can be set directly by the users. To have plotly compute them or to show sample points besides the boxes, users can set the `y` data array for vertical boxes (`x` for horizontal boxes) to a 2D array with the outer length corresponding to the number of boxes in the traces and the inner length corresponding the sample size." }, - "type": "violin" + "type": "box" }, - "histogram": { + "violin": { "animatable": false, "attributes": { - "type": "histogram", + "type": "violin", "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", + "description": "Sets the trace name. The trace name appears 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).", + "editType": "calc+clearAxisTypes", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='violin'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='violin'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -37119,35 +34288,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='violin'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": true, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='violin'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='violin'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='violin'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='violin'))" }, "legendgrouptitle": { "editType": "style", @@ -37155,7 +34324,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='violin'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -37165,7 +34334,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='violin'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -37180,7 +34349,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='violin'))" }, "role": "object", "shadow": { @@ -37188,13 +34357,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='violin'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='violin'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -37205,7 +34374,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='violin'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -37218,7 +34387,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='violin'))" }, "variant": { "description": "Sets the variant of the font.", @@ -37233,7 +34402,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='violin'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -37246,9 +34415,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='violin'))" }, "role": "object", "text": { @@ -37256,16 +34425,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='violin'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='violin'))" }, "opacity": { "description": "Sets the opacity of the trace.", @@ -37274,105 +34443,72 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='violin'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='violin'))" }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, "editType": "plot", "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='violin'))" }, "x": { - "description": "Sets the sample data to be binned on the x axis.", + "description": "Sets the x sample data or coordinates. See overview for more info.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='violin'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" + "x0": { + "description": "Sets the x coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='violin'))" }, "y": { - "description": "Sets the sample data to be binned on the y axis.", + "description": "Sets the y sample data or coordinates. See overview for more info.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='violin'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" + "y0": { + "description": "Sets the y coordinate for single-box traces or the starting coordinate for multi-box traces set using q1/median/q3. See overview for more info.", + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='violin'))" + }, + "width": { + "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.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='violin'))" }, "text": { "arrayOk": true, - "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.", + "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.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='histogram'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "textposition": { - "arrayOk": false, - "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. If *none*, no text appears.", - "dflt": "auto", - "editType": "calc", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "auto", - "none" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='violin'))" }, - "texttemplate": { - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label` and `value`.", + "hovertext": { + "arrayOk": true, + "description": "Same as `text`.", "dflt": "", - "editType": "plot", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram'))" - }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='histogram'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='violin'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -37388,6411 +34524,822 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='violin'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `binNumber` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='violin'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='violin'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='violin'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='violin'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='violin'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='violin'))" }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='violin'))" }, "yaxis": { "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", "dflt": "y", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='violin'))" }, "orientation": { - "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal).", + "description": "Sets the orientation of the violin(s). If *v* (*h*), the distribution is visualized along the vertical (horizontal).", "editType": "calc+clearAxisTypes", "valType": "enumerated", "values": [ "v", "h" ], - "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='histogram'))" - }, - "histfunc": { - "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.", - "dflt": "count", - "editType": "calc", - "valType": "enumerated", - "values": [ - "count", - "sum", - "avg", - "min", - "max" - ], - "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram'))" - }, - "histnorm": { - "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).", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "", - "percent", - "probability", - "density", - "probability density" - ], - "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='violin'))" }, "alignmentgroup": { "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='violin'))" }, "offsetgroup": { "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='histogram'))" - }, - "nbinsx": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram'))" - }, - "nbinsy": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram'))" - }, - "autobinx": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram'))" - }, - "autobiny": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram'))" - }, - "bingroup": { - "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`", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram'))" - }, - "xbins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "size": { - "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* 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", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram'))" - }, - "start": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram'))" - }, - "ybins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "size": { - "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* 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", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram'))" - }, - "start": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='violin'))" }, "marker": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='histogram'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='histogram'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='histogram'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, + "angle": { + "arrayOk": false, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='histogram'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='histogram'))" + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='violin'))" }, "color": { - "arrayOk": true, + "arrayOk": false, "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='violin'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='histogram'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", + "editType": "plot", + "line": { + "color": { + "arrayOk": false, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", "dflt": "#444", - "editType": "colorbars", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='histogram'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='histogram'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='histogram'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='histogram'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='histogram'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='histogram'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='histogram'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='histogram'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='violin'))" }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", + "editType": "style", + "outliercolor": { + "description": "Sets the border line color of the outlier sample points. Defaults to marker.color", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_line_outliercolor=<VALUE>, selector=dict(type='violin'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", + "outlierwidth": { + "description": "Sets the border line width (in px) of the outlier sample points.", "dflt": 1, - "editType": "colorbars", + "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_line_outlierwidth=<VALUE>, selector=dict(type='violin'))" }, "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='histogram'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='histogram'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='histogram'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram'))" - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", + "width": { + "arrayOk": false, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "dflt": 0, + "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='histogram'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='histogram'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='histogram'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='violin'))" }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='histogram'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='histogram'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='histogram'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='histogram'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='histogram'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='histogram'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='histogram'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='histogram'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='histogram'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='histogram'))" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='histogram'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='histogram'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='histogram'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='histogram'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='histogram'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='histogram'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='histogram'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='histogram'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='histogram'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='histogram'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='histogram'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='histogram'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='histogram'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='histogram'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='histogram'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='violin'))" }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='histogram'))" + "opacity": { + "arrayOk": false, + "description": "Sets the marker opacity.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='violin'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "outliercolor": { + "description": "Sets the color of the outlier sample points.", + "dflt": "rgba(0, 0, 0, 0)", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_outliercolor=<VALUE>, selector=dict(type='violin'))" }, - "cornerradius": { - "description": "Sets the rounding of corners. May be an integer number of pixels, or a percentage of bar width (as a string ending in %). Defaults to `layout.barcornerradius`. In stack or relative barmode, the first trace to set cornerradius is used for the whole stack.", + "role": "object", + "size": { + "arrayOk": false, + "description": "Sets the marker size (in px).", + "dflt": 6, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_cornerradius=<VALUE>, selector=dict(type='histogram'))" + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='violin'))" }, - "editType": "calc", - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='histogram'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='histogram'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='histogram'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='histogram'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='histogram'))" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='histogram'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='histogram'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='histogram'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='histogram'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='histogram'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the opacity of the bars.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='histogram'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "pattern": { - "bgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='histogram'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the pattern within the marker.", - "editType": "style", - "fgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='histogram'))" - }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, - "fgopacity": { - "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_fgopacity=<VALUE>, selector=dict(type='histogram'))" - }, - "fillmode": { - "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", - "dflt": "replace", - "editType": "style", - "valType": "enumerated", - "values": [ - "replace", - "overlay" - ], - "magic_underscores": "fig.update_traces(marker_pattern_fillmode=<VALUE>, selector=dict(type='histogram'))" - }, - "path": { - "arrayOk": true, - "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='histogram'))" - }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shape": { - "arrayOk": true, - "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", - "dflt": "", - "editType": "style", - "valType": "enumerated", - "values": [ - "", - "/", - "\\", - "x", - "-", - "|", - "+", - "." - ], - "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='histogram'))" - }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", - "dflt": 8, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='histogram'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "solidity": { - "arrayOk": true, - "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", - "dflt": 0.3, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='histogram'))" - }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='histogram'))" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram'))" - }, - "textangle": { - "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.", - "dflt": "auto", - "editType": "plot", - "valType": "angle", - "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='histogram'))" - }, - "textfont": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "description": "Sets the text font.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram'))" - }, - "error_x": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_x_array=<VALUE>, selector=dict(type='histogram'))" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='histogram'))" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(error_x_color=<VALUE>, selector=dict(type='histogram'))" - }, - "copy_ystyle": { - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_copy_ystyle=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_symmetric=<VALUE>, selector=dict(type='histogram'))" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_thickness=<VALUE>, selector=dict(type='histogram'))" - }, - "traceref": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_x_traceref=<VALUE>, selector=dict(type='histogram'))" - }, - "tracerefminus": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_x_tracerefminus=<VALUE>, selector=dict(type='histogram'))" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ], - "magic_underscores": "fig.update_traces(error_x_type=<VALUE>, selector=dict(type='histogram'))" - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_value=<VALUE>, selector=dict(type='histogram'))" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_valueminus=<VALUE>, selector=dict(type='histogram'))" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_visible=<VALUE>, selector=dict(type='histogram'))" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "symbol": { + "arrayOk": false, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_width=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(error_x=dict(...), selector=dict(type='histogram'))" - }, - "error_y": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_y_array=<VALUE>, selector=dict(type='histogram'))" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='histogram'))" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(error_y_color=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_y_symmetric=<VALUE>, selector=dict(type='histogram'))" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_thickness=<VALUE>, selector=dict(type='histogram'))" - }, - "traceref": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_y_traceref=<VALUE>, selector=dict(type='histogram'))" - }, - "tracerefminus": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_y_tracerefminus=<VALUE>, selector=dict(type='histogram'))" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", "valType": "enumerated", "values": [ - "percent", - "constant", - "sqrt", - "data" - ], - "magic_underscores": "fig.update_traces(error_y_type=<VALUE>, selector=dict(type='histogram'))" - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_value=<VALUE>, selector=dict(type='histogram'))" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_valueminus=<VALUE>, selector=dict(type='histogram'))" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_y_visible=<VALUE>, selector=dict(type='histogram'))" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_width=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(error_y=dict(...), selector=dict(type='histogram'))" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='histogram'))" - }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='histogram'))" - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_textfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "style", - "role": "object", - "magic_underscores": "fig.update_traces(selected_textfont=dict(...), selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='histogram'))" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='histogram'))" - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_textfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "style", - "role": "object", - "magic_underscores": "fig.update_traces(unselected_textfont=dict(...), selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='histogram'))" - }, - "cliponaxis": { - "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*.", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='histogram'))" - }, - "constraintext": { - "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", - "dflt": "both", - "editType": "calc", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "both", - "none" - ], - "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='histogram'))" - }, - "cumulative": { - "currentbin": { - "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.", - "dflt": "include", - "editType": "calc", - "valType": "enumerated", - "values": [ - "include", - "exclude", - "half" - ], - "magic_underscores": "fig.update_traces(cumulative_currentbin=<VALUE>, selector=dict(type='histogram'))" - }, - "direction": { - "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.", - "dflt": "increasing", - "editType": "calc", - "valType": "enumerated", - "values": [ - "increasing", - "decreasing" - ], - "magic_underscores": "fig.update_traces(cumulative_direction=<VALUE>, selector=dict(type='histogram'))" - }, - "editType": "calc", - "enabled": { - "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.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(cumulative_enabled=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(cumulative=dict(...), selector=dict(type='histogram'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram'))" - }, - "insidetextanchor": { - "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode.", - "dflt": "end", - "editType": "plot", - "valType": "enumerated", - "values": [ - "end", - "middle", - "start" - ], - "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='histogram'))" - }, - "insidetextfont": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "description": "Sets the font used for `text` lying inside the bar.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='histogram'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='histogram'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='histogram'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='histogram'))" - }, - "outsidetextfont": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='histogram'))" - }, - "description": "Sets the font used for `text` lying outside the bar.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='histogram'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='histogram'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='histogram'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='histogram'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='histogram'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='histogram'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='histogram'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='histogram'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='histogram'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram'))" - }, - "categories": [ - "bar-like", - "cartesian", - "svg", - "bar", - "histogram", - "oriented", - "errorBarsOK", - "showLegend" - ], - "layoutAttributes": { - "barcornerradius": { - "description": "Sets the rounding of bar corners. May be an integer number of pixels, or a percentage of bar width (as a string ending in %).", - "editType": "calc", - "valType": "any" - }, - "bargap": { - "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "bargroupgap": { - "description": "Sets the gap (in plot fraction) between bars of the same location coordinate.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "barmode": { - "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 reduce *opacity* to see multiple bars.", - "dflt": "group", - "editType": "calc", - "valType": "enumerated", - "values": [ - "stack", - "group", - "overlay", - "relative" - ] - }, - "barnorm": { - "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.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "", - "fraction", - "percent" - ] - } - }, - "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." - }, - "type": "histogram" - }, - "histogram2d": { - "animatable": false, - "attributes": { - "type": "histogram2d", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram2d'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram2d'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram2d'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram2d'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram2d'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram2d'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram2d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram2d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram2d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram2d'))" - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram2d'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram2d'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram2d'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the sample data to be binned on the x axis.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "xgap": { - "description": "Sets the horizontal gap (in pixels) between bricks.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(xgap=<VALUE>, selector=dict(type='histogram2d'))" - }, - "y": { - "description": "Sets the sample data to be binned on the y axis.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "ygap": { - "description": "Sets the vertical gap (in pixels) between bricks.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(ygap=<VALUE>, selector=dict(type='histogram2d'))" - }, - "z": { - "description": "Sets the aggregation data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z`", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram2d'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram2d'))" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram2d'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram2d'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram2d'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram2d'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram2d'))" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram2d'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram2d'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram2d'))" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram2d'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='histogram2d'))" - }, - "histfunc": { - "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.", - "dflt": "count", - "editType": "calc", - "valType": "enumerated", - "values": [ - "count", - "sum", - "avg", - "min", - "max" - ], - "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram2d'))" - }, - "histnorm": { - "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).", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "", - "percent", - "probability", - "density", - "probability density" - ], - "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram2d'))" - }, - "nbinsx": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram2d'))" - }, - "nbinsy": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram2d'))" - }, - "autobinx": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram2d'))" - }, - "autobiny": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram2d'))" - }, - "bingroup": { - "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.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xbingroup": { - "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`", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(xbingroup=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xbins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "size": { - "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "start": { - "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. ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram2d'))" - }, - "ybingroup": { - "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`", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(ybingroup=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ybins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "size": { - "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "start": { - "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. ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram2d'))" - }, - "marker": { - "color": { - "description": "Sets the aggregation data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram2d'))" - }, - "textfont": { - "color": { - "dflt": "auto", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "description": "Sets the text font.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram2d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "size": { - "dflt": "auto", - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram2d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram2d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram2d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram2d'))" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='histogram2d'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='histogram2d'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='histogram2d'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='histogram2d'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='histogram2d'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='histogram2d'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='histogram2d'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='histogram2d'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='histogram2d'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram2d'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='histogram2d'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram2d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram2d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram2d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram2d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='histogram2d'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='histogram2d'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='histogram2d'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='histogram2d'))" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='histogram2d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='histogram2d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram2d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='histogram2d'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='histogram2d'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='histogram2d'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='histogram2d'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='histogram2d'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='histogram2d'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='histogram2d'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='histogram2d'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": false, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='histogram2d'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='histogram2d'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='histogram2d'))" - }, - "reversescale": { - "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.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zauto": { - "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.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zmax": { - "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.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zmid": { - "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`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zmin": { - "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.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='histogram2d'))" - }, - "zsmooth": { - "description": "Picks a smoothing algorithm use to smooth `z` data.", - "dflt": false, - "editType": "calc", - "valType": "enumerated", - "values": [ - "fast", - "best", - false - ], - "magic_underscores": "fig.update_traces(zsmooth=<VALUE>, selector=dict(type='histogram2d'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram2d'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram2d'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram2d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram2d'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram2d'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram2d'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram2d'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram2d'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram2d'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram2d'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram2d'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram2d'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram2d'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram2d'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='histogram2d'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='histogram2d'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram2d'))" - }, - "categories": [ - "cartesian", - "svg", - "2dMap", - "histogram", - "showLegend" - ], - "meta": { - "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.", - "hrName": "histogram_2d" - }, - "type": "histogram2d" - }, - "histogram2dcontour": { - "animatable": false, - "attributes": { - "type": "histogram2dcontour", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the sample data to be binned on the x axis.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the sample data to be binned on the y axis.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the aggregation data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `z` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "histfunc": { - "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.", - "dflt": "count", - "editType": "calc", - "valType": "enumerated", - "values": [ - "count", - "sum", - "avg", - "min", - "max" - ], - "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "histnorm": { - "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).", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "", - "percent", - "probability", - "density", - "probability density" - ], - "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "nbinsx": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "nbinsy": { - "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.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "autobinx": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "autobiny": { - "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.", - "dflt": null, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "bingroup": { - "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.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xbingroup": { - "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`", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(xbingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xbins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "size": { - "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "start": { - "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. ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "ybingroup": { - "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`", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(ybingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ybins": { - "editType": "calc", - "end": { - "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.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "size": { - "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "start": { - "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. ", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "marker": { - "color": { - "description": "Sets the aggregation data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "line": { - "color": { - "description": "Sets the color of the contour level. Has no effect if `contours.coloring` is set to *lines*.", - "editType": "style+colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ], - "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "editType": "plot", - "role": "object", - "smoothing": { - "description": "Sets the amount of smoothing for the contour lines, where *0* corresponds to no smoothing.", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(line_smoothing=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "width": { - "description": "Sets the contour line width in (in px)", - "dflt": 0.5, - "editType": "style+colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "textfont": { - "color": { - "dflt": "auto", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Sets the text font.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "dflt": "auto", - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='histogram2dcontour'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "reversescale": { - "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.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zauto": { - "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.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zmax": { - "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.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zmid": { - "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`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "zmin": { - "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.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "autocontour": { - "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`.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocontour_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocontour=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "contours": { - "coloring": { - "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.", - "dflt": "fill", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fill", - "heatmap", - "lines", - "none" - ], - "magic_underscores": "fig.update_traces(contours_coloring=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "editType": "calc", - "end": { - "description": "Sets the end contour level value. Must be more than `contours.start`", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "^autocontour": false, - "magic_underscores": "fig.update_traces(contours_end_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_end=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "impliedEdits": { - "autocontour": false, - "role": "object", - "magic_underscores": "fig.update_traces(contours_impliedEdits=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "labelfont": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(contours_labelfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "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`.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(contours_labelfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(contours_labelfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(contours_labelfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_labelfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(contours_labelfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(contours_labelfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(contours_labelfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(contours_labelfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(contours_labelfont=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "labelformat": { - "description": "Sets the contour label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(contours_labelformat=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "operation": { - "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.", - "dflt": "=", - "editType": "calc", - "valType": "enumerated", - "values": [ - "=", - "<", - ">=", - ">", - "<=", - "[]", - "()", - "[)", - "(]", - "][", - ")(", - "](", - ")[" - ], - "magic_underscores": "fig.update_traces(contours_operation=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "showlabels": { - "description": "Determines whether to label the contour lines with their values.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_showlabels=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "showlines": { - "description": "Determines whether or not the contour lines are drawn. Has an effect only if `contours.coloring` is set to *fill*.", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_showlines=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "size": { - "description": "Sets the step between each contour level. Must be positive.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "^autocontour": false, - "magic_underscores": "fig.update_traces(contours_size_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "start": { - "description": "Sets the starting contour level value. Must be less than `contours.end`", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "^autocontour": false, - "magic_underscores": "fig.update_traces(contours_start_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_start=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "type": { - "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.", - "dflt": "levels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "levels", - "constraint" - ], - "magic_underscores": "fig.update_traces(contours_type=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "value": { - "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.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(contours_value=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(contours=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "ncontours": { - "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.", - "dflt": 15, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(ncontours=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='histogram2dcontour'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram2dcontour'))" - }, - "categories": [ - "cartesian", - "svg", - "2dMap", - "contour", - "histogram", - "showLegend" - ], - "meta": { - "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.", - "hrName": "histogram_2d_contour" - }, - "type": "histogram2dcontour" - }, - "ohlc": { - "animatable": false, - "attributes": { - "type": "ohlc", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='ohlc'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='ohlc'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='ohlc'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='ohlc'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='ohlc'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='ohlc'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='ohlc'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='ohlc'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='ohlc'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='ohlc'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='ohlc'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='ohlc'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='ohlc'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='ohlc'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='ohlc'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='ohlc'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='ohlc'))" + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ], + "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='violin'))" }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='violin'))" + }, + "line": { + "color": { + "description": "Sets the color of line bounding the violin(s).", "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='ohlc'))" + "valType": "color", + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='ohlc'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='ohlc'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='ohlc'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='ohlc'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, "editType": "plot", - "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='ohlc'))" - }, - "x": { - "description": "Sets the x coordinates. If absent, linear coordinate will be generated.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='ohlc'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "close": { - "description": "Sets the close values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(close=<VALUE>, selector=dict(type='ohlc'))" - }, - "closesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `close`.", - "editType": "none", - "valType": "string" - }, - "open": { - "description": "Sets the open values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(open=<VALUE>, selector=dict(type='ohlc'))" - }, - "opensrc": { - "description": "Sets the source reference on Chart Studio Cloud for `open`.", - "editType": "none", - "valType": "string" - }, - "high": { - "description": "Sets the high values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(high=<VALUE>, selector=dict(type='ohlc'))" - }, - "highsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `high`.", - "editType": "none", - "valType": "string" - }, - "low": { - "description": "Sets the low values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(low=<VALUE>, selector=dict(type='ohlc'))" - }, - "lowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `low`.", - "editType": "none", - "valType": "string" - }, - "text": { - "arrayOk": true, - "description": "Sets hover text elements associated with each sample point. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to this trace's sample points.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='ohlc'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='ohlc'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='ohlc'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `open`, `high`, `low` and `close`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='ohlc'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='ohlc'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='ohlc'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='ohlc'))" + "role": "object", + "width": { + "description": "Sets the width (in px) of line bounding the violin(s).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='violin'))" + }, + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='violin'))" }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "box": { "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='ohlc'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='ohlc'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='ohlc'))" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='ohlc'))" - }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='ohlc'))" - }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='ohlc'))" - }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='ohlc'))" - }, - "line": { - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*). Note that this style setting can also be set per direction via `increasing.line.dash` and `decreasing.line.dash`.", - "dflt": "solid", + "fillcolor": { + "description": "Sets the inner box plot fill color.", "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ], - "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='ohlc'))" + "valType": "color", + "magic_underscores": "fig.update_traces(box_fillcolor=<VALUE>, selector=dict(type='violin'))" + }, + "line": { + "color": { + "description": "Sets the inner box plot bounding line color.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(box_line_color=<VALUE>, selector=dict(type='violin'))" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the inner box plot bounding line width.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(box_line_width=<VALUE>, selector=dict(type='violin'))" + }, + "magic_underscores": "fig.update_traces(box_line=dict(...), selector=dict(type='violin'))" }, - "editType": "style", "role": "object", + "visible": { + "description": "Determines if an miniature box plot is drawn inside the violins. ", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(box_visible=<VALUE>, selector=dict(type='violin'))" + }, "width": { - "description": "[object Object] Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`.", - "dflt": 2, - "editType": "style", + "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.", + "dflt": 0.25, + "editType": "plot", + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(box_width=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(box=dict(...), selector=dict(type='violin'))" + }, + "quartilemethod": { + "description": "Sets the method used to compute the sample's Q1 and Q3 quartiles. The *linear* method uses the 25th percentile for Q1 and 75th percentile for Q3 as computed using method #10 (listed on http://jse.amstat.org/v14n3/langford.html). The *exclusive* method uses the median to divide the ordered dataset into two halves if the sample is odd, it does not include the median in either half - Q1 is then the median of the lower half and Q3 the median of the upper half. The *inclusive* method also uses the median to divide the ordered dataset into two halves but if the sample is odd, it includes the median in both halves - Q1 is then the median of the lower half and Q3 the median of the upper half.", + "dflt": "linear", + "editType": "calc", + "valType": "enumerated", + "values": [ + "linear", + "exclusive", + "inclusive" + ], + "magic_underscores": "fig.update_traces(quartilemethod=<VALUE>, selector=dict(type='violin'))" }, "selectedpoints": { "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='violin'))" }, - "increasing": { + "selected": { "editType": "style", - "line": { + "marker": { "color": { - "description": "Sets the line color.", - "dflt": "#3D9970", + "description": "Sets the marker color of selected points.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(increasing_line_color=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='violin'))" }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ], - "magic_underscores": "fig.update_traces(increasing_line_dash=<VALUE>, selector=dict(type='ohlc'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='violin'))" }, - "editType": "style", "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, + "size": { + "description": "Sets the marker size of selected points.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(increasing_line_width=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(increasing_line=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='violin'))" }, "role": "object", - "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='violin'))" }, - "decreasing": { + "unselected": { "editType": "style", - "line": { + "marker": { "color": { - "description": "Sets the line color.", - "dflt": "#FF4136", + "description": "Sets the marker color of unselected points, applied only when a selection exists.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(decreasing_line_color=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='violin'))" }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ], - "magic_underscores": "fig.update_traces(decreasing_line_dash=<VALUE>, selector=dict(type='ohlc'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='violin'))" }, - "editType": "style", "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(decreasing_line_width=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(decreasing_line=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='violin'))" }, "role": "object", - "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='violin'))" + }, + "bandwidth": { + "description": "Sets the bandwidth used to compute the kernel density estimate. By default, the bandwidth is determined by Silverman's rule of thumb.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(bandwidth=<VALUE>, selector=dict(type='violin'))" + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='violin'))" }, "hoverlabel": { "align": { @@ -43806,36 +35353,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='ohlc'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='violin'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='ohlc'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='violin'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='ohlc'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='violin'))" }, "editType": "none", "font": { @@ -43843,12 +35375,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='ohlc'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='violin'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -43859,12 +35386,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='ohlc'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='violin'))" }, "lineposition": { "arrayOk": true, @@ -43880,12 +35402,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='ohlc'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='violin'))" }, "role": "object", "shadow": { @@ -43894,24 +35411,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='ohlc'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='violin'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='ohlc'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='violin'))" }, "style": { "arrayOk": true, @@ -43923,12 +35430,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='ohlc'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='violin'))" }, "textcase": { "arrayOk": true, @@ -43942,12 +35444,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='ohlc'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='violin'))" }, "variant": { "arrayOk": true, @@ -43963,12 +35460,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='ohlc'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='violin'))" }, "weight": { "arrayOk": true, @@ -43982,14 +35474,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='ohlc'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='violin'))" }, "namelength": { "arrayOk": true, @@ -43998,119 +35485,210 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='violin'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='violin'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='violin'))" + }, + "hoveron": { + "description": "Do the hover effects highlight individual violins or sample points or the kernel density estimate or any combination of them?", + "dflt": "violins+points+kde", + "editType": "style", + "extras": [ + "all" + ], + "flags": [ + "violins", + "points", + "kde" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoveron=<VALUE>, selector=dict(type='violin'))" + }, + "pointpos": { + "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.", + "editType": "calc", + "max": 2, + "min": -2, + "valType": "number", + "magic_underscores": "fig.update_traces(pointpos=<VALUE>, selector=dict(type='violin'))" + }, + "jitter": { + "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.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(jitter=<VALUE>, selector=dict(type='violin'))" + }, + "meanline": { + "color": { + "description": "Sets the mean line color.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(meanline_color=<VALUE>, selector=dict(type='violin'))" }, + "editType": "plot", "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", + "visible": { + "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.", + "dflt": false, + "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(meanline_visible=<VALUE>, selector=dict(type='violin'))" }, - "split": { - "description": "Show hover information (open, close, high, low) in separate labels, rather than a single unified label. Default: *false*. When set to *true*, `hovertemplate` is ignored.", - "dflt": false, + "width": { + "description": "Sets the mean line width.", "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_split=<VALUE>, selector=dict(type='ohlc'))" + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(meanline_width=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(meanline=dict(...), selector=dict(type='violin'))" }, - "tickwidth": { - "description": "Sets the width of the open/close tick marks relative to the *x* minimal interval.", - "dflt": 0.3, + "points": { + "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. Defaults to *suspectedoutliers* when `marker.outliercolor` or `marker.line.outliercolor` is set, otherwise defaults to *outliers*.", "editType": "calc", - "max": 0.5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(tickwidth=<VALUE>, selector=dict(type='ohlc'))" + "valType": "enumerated", + "values": [ + "all", + "outliers", + "suspectedoutliers", + false + ], + "magic_underscores": "fig.update_traces(points=<VALUE>, selector=dict(type='violin'))" }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", + "scalegroup": { + "description": "If there are multiple violins that should be sized according 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", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(scalegroup=<VALUE>, selector=dict(type='violin'))" + }, + "scalemode": { + "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 making up each violin.", + "dflt": "width", "editType": "calc", "valType": "enumerated", "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" + "width", + "count" ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(scalemode=<VALUE>, selector=dict(type='violin'))" + }, + "side": { + "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*.", + "dflt": "both", + "editType": "calc", + "valType": "enumerated", + "values": [ + "both", + "positive", + "negative" + ], + "magic_underscores": "fig.update_traces(side=<VALUE>, selector=dict(type='violin'))" + }, + "span": { + "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*.", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array", + "magic_underscores": "fig.update_traces(span=list(...), selector=dict(type='violin'))" + }, + "spanmode": { + "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.", + "dflt": "soft", + "editType": "calc", + "valType": "enumerated", + "values": [ + "soft", + "hard", + "manual" + ], + "magic_underscores": "fig.update_traces(spanmode=<VALUE>, selector=dict(type='violin'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='ohlc'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='ohlc'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='ohlc'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='violin'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='ohlc'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='violin'))" }, "categories": [ "cartesian", "svg", - "showLegend" + "symbols", + "oriented", + "box-violin", + "showLegend", + "violinLayout", + "zoomScale" ], + "layoutAttributes": { + "violingap": { + "description": "Sets the gap (in plot fraction) between violins of adjacent location coordinates. Has no effect on traces that have *width* set.", + "dflt": 0.3, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "violingroupgap": { + "description": "Sets the gap (in plot fraction) between violins of the same location coordinate. Has no effect on traces that have *width* set.", + "dflt": 0.3, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "violinmode": { + "description": "Determines how violins at the same location coordinate are displayed on the graph. If *group*, the violins are plotted next to one another centered around the shared location. If *overlay*, the violins are plotted over one another, you might need to set *opacity* to see them multiple violins. Has no effect on traces that have *width* set.", + "dflt": "overlay", + "editType": "calc", + "valType": "enumerated", + "values": [ + "group", + "overlay" + ] + } + }, "meta": { - "description": "The ohlc (short for Open-High-Low-Close) is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The tip of the lines represent the `low` and `high` values and the horizontal segments represent the `open` and `close` values. Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing items are drawn in green whereas decreasing are drawn in red." + "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 `name` or with `x0` (`y0`) if provided." }, - "type": "ohlc" + "type": "violin" }, - "candlestick": { + "histogram": { "animatable": false, "attributes": { - "type": "candlestick", + "type": "histogram", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -44122,35 +35700,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": true, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram'))" }, "legendgrouptitle": { "editType": "style", @@ -44158,7 +35736,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -44168,7 +35746,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -44183,7 +35761,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "shadow": { @@ -44191,13 +35769,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -44208,7 +35786,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -44221,7 +35799,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram'))" }, "variant": { "description": "Sets the variant of the font.", @@ -44236,7 +35814,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -44249,9 +35827,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram'))" }, "role": "object", "text": { @@ -44259,16 +35837,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram'))" }, "opacity": { "description": "Sets the opacity of the trace.", @@ -44277,110 +35855,80 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='candlestick'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram'))" }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, "editType": "plot", "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='histogram'))" }, "x": { - "description": "Sets the x coordinates. If absent, linear coordinate will be generated.", + "description": "Sets the sample data to be binned on the x axis.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='candlestick'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "close": { - "description": "Sets the close values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(close=<VALUE>, selector=dict(type='candlestick'))" - }, - "closesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `close`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram'))" }, - "open": { - "description": "Sets the open values.", - "editType": "calc", + "y": { + "description": "Sets the sample data to be binned on the y axis.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(open=<VALUE>, selector=dict(type='candlestick'))" - }, - "opensrc": { - "description": "Sets the source reference on Chart Studio Cloud for `open`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram'))" }, - "high": { - "description": "Sets the high values.", + "text": { + "arrayOk": true, + "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.", + "dflt": "", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(high=<VALUE>, selector=dict(type='candlestick'))" - }, - "highsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `high`.", - "editType": "none", - "valType": "string" + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='histogram'))" }, - "low": { - "description": "Sets the low values.", + "textposition": { + "arrayOk": false, + "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. If *none*, no text appears.", + "dflt": "auto", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(low=<VALUE>, selector=dict(type='candlestick'))" - }, - "lowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `low`.", - "editType": "none", - "valType": "string" + "valType": "enumerated", + "values": [ + "inside", + "outside", + "auto", + "none" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='histogram'))" }, - "text": { - "arrayOk": true, - "description": "Sets hover text elements associated with each sample point. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to this trace's sample points.", + "texttemplate": { + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label` and `value`.", "dflt": "", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram'))" }, "hovertext": { "arrayOk": true, "description": "Same as `text`.", "dflt": "", - "editType": "calc", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='candlestick'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='histogram'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -44396,1097 +35944,1190 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='candlestick'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `open`, `high`, `low` and `close`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `binNumber` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='candlestick'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='candlestick'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='candlestick'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram'))" }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram'))" }, "yaxis": { "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", "dflt": "y", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram'))" }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, + "orientation": { + "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal).", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "v", + "h" + ], + "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='histogram'))" + }, + "histfunc": { + "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.", + "dflt": "count", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='candlestick'))" + "valType": "enumerated", + "values": [ + "count", + "sum", + "avg", + "min", + "max" + ], + "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram'))" }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", + "histnorm": { + "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).", + "dflt": "", "editType": "calc", "valType": "enumerated", "values": [ - "start", - "middle", - "end" + "", + "percent", + "probability", + "density", + "probability density" ], - "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram'))" }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "alignmentgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", + "dflt": "", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='candlestick'))" + "valType": "string", + "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='histogram'))" }, - "line": { - "editType": "style", - "role": "object", - "width": { - "description": "Sets the width (in px) of line bounding the box(es). Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`.", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='candlestick'))" + "offsetgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='histogram'))" }, - "whiskerwidth": { - "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).", + "nbinsx": { + "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.", "dflt": 0, "editType": "calc", - "max": 1, "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(whiskerwidth=<VALUE>, selector=dict(type='candlestick'))" + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "nbinsy": { + "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.", + "dflt": 0, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='candlestick'))" + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram'))" }, - "increasing": { - "editType": "style", - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(increasing_fillcolor=<VALUE>, selector=dict(type='candlestick'))" + "autobinx": { + "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.", + "dflt": null, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram'))" + }, + "autobiny": { + "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.", + "dflt": null, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram'))" + }, + "bingroup": { + "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`", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram'))" + }, + "xbins": { + "editType": "calc", + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram'))" }, - "line": { - "color": { - "description": "Sets the color of line bounding the box(es).", - "dflt": "#3D9970", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(increasing_line_color=<VALUE>, selector=dict(type='candlestick'))" - }, - "editType": "style", - "role": "object", - "width": { - "description": "Sets the width (in px) of line bounding the box(es).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(increasing_line_width=<VALUE>, selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(increasing_line=dict(...), selector=dict(type='candlestick'))" + "role": "object", + "size": { + "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* 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", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram'))" + }, + "start": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram'))" + }, + "ybins": { + "editType": "calc", + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", - "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='candlestick'))" - }, - "decreasing": { - "editType": "style", - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(decreasing_fillcolor=<VALUE>, selector=dict(type='candlestick'))" + "size": { + "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* 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", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram'))" }, - "line": { - "color": { - "description": "Sets the color of line bounding the box(es).", - "dflt": "#FF4136", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(decreasing_line_color=<VALUE>, selector=dict(type='candlestick'))" - }, - "editType": "style", - "role": "object", - "width": { - "description": "Sets the width (in px) of line bounding the box(es).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(decreasing_line_width=<VALUE>, selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(decreasing_line=dict(...), selector=dict(type='candlestick'))" + "start": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram'))" }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='candlestick'))" + "marker": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='histogram'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='histogram'))" }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='candlestick'))" + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='histogram'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='histogram'))" }, - "bordercolor": { + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='histogram'))" + }, + "color": { "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='histogram'))" }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='histogram'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='histogram'))" }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='candlestick'))" + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='histogram'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='histogram'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" ], - "flags": [ - "under", - "over", - "through" + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='histogram'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='histogram'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='histogram'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='histogram'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='histogram'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='histogram'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='histogram'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='candlestick'))" + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='histogram'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='histogram'))" }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='histogram'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram'))" + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='histogram'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='histogram'))" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='histogram'))" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='histogram'))" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='histogram'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='histogram'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='histogram'))" }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "italic" + "allow", + "hide past div", + "hide past domain" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='candlestick'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='histogram'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "auto", + "linear", + "array" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='histogram'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='histogram'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='candlestick'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='histogram'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='candlestick'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='candlestick'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='candlestick'))" - }, - "split": { - "description": "Show hover information (open, close, high, low) in separate labels, rather than a single unified label. Default: *false*. When set to *true*, `hovertemplate` is ignored.", - "dflt": false, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_split=<VALUE>, selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='candlestick'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='candlestick'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='candlestick'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='candlestick'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='candlestick'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='candlestick'))" - }, - "categories": [ - "cartesian", - "svg", - "showLegend", - "candlestick", - "boxLayout" - ], - "layoutAttributes": { - "boxgap": { - "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates. Has no effect on traces that have *width* set.", - "dflt": 0.3, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "boxgroupgap": { - "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate. Has no effect on traces that have *width* set.", - "dflt": 0.3, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "boxmode": { - "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.", - "dflt": "overlay", - "editType": "calc", - "valType": "enumerated", - "values": [ - "group", - "overlay" - ] - } - }, - "meta": { - "description": "The candlestick is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The boxes represent the spread between the `open` and `close` values and the lines represent the spread between the `low` and `high` values Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing candles are drawn in green whereas decreasing are drawn in red." - }, - "type": "candlestick" - }, - "waterfall": { - "animatable": false, - "attributes": { - "type": "waterfall", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='waterfall'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='waterfall'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='waterfall'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='waterfall'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='waterfall'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='waterfall'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='waterfall'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='waterfall'))" + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='histogram'))" }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='waterfall'))" + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='histogram'))" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='waterfall'))" + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='histogram'))" }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='waterfall'))" + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='histogram'))" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='histogram'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='histogram'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='histogram'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='histogram'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='histogram'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='histogram'))" }, - "size": { - "editType": "style", - "min": 1, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='histogram'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='histogram'))" + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='histogram'))" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "italic" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='histogram'))" }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='histogram'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "top", + "middle", + "bottom" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='histogram'))" }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='histogram'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='histogram'))" }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='histogram'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='waterfall'))" + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='histogram'))" }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='waterfall'))" + "cornerradius": { + "description": "Sets the rounding of corners. May be an integer number of pixels, or a percentage of bar width (as a string ending in %). Defaults to `layout.barcornerradius`. In stack or relative barmode, the first trace to set cornerradius is used for the whole stack.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(marker_cornerradius=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='waterfall'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='waterfall'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='waterfall'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='waterfall'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='waterfall'))" - }, - "x": { - "description": "Sets the x coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='waterfall'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "x0": { - "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='waterfall'))" - }, - "dx": { - "description": "Sets the x coordinate step. See `x0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='waterfall'))" - }, - "y": { - "description": "Sets the y coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='waterfall'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "y0": { - "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='waterfall'))" - }, - "dy": { - "description": "Sets the y coordinate step. See `y0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='waterfall'))" - }, - "base": { - "arrayOk": false, - "description": "Sets where the bar base is drawn (in position axis units).", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(base=<VALUE>, selector=dict(type='waterfall'))" - }, - "width": { - "arrayOk": true, - "description": "Sets the bar width (in position axis units).", - "dflt": null, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='waterfall'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, - "measure": { - "description": "An array containing types of values. By default the values are considered as 'relative'. However; it is possible to use 'total' to compute the sums. Also 'absolute' could be applied to reset the computed total or to declare an initial value where needed.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(measure=<VALUE>, selector=dict(type='waterfall'))" - }, - "measuresrc": { - "description": "Sets the source reference on Chart Studio Cloud for `measure`.", - "editType": "none", - "valType": "string" - }, - "offset": { - "arrayOk": true, - "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.", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='waterfall'))" - }, - "offsetsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `offset`.", - "editType": "none", - "valType": "string" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='waterfall'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "textposition": { - "arrayOk": true, - "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. If *none*, no text appears.", - "dflt": "auto", - "editType": "calc", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "auto", - "none" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='waterfall'))" - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `initial`, `delta`, `final` and `label`.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='waterfall'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='waterfall'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='waterfall'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "name", - "x", - "y", - "text", - "initial", - "delta", - "final" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='waterfall'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `initial`, `delta` and `final`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='waterfall'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='waterfall'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='waterfall'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='waterfall'))" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='waterfall'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='waterfall'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='waterfall'))" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='waterfall'))" - }, - "orientation": { - "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal).", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "v", - "h" - ], - "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='waterfall'))" - }, - "alignmentgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='waterfall'))" - }, - "offsetgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='waterfall'))" - }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='waterfall'))" - }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='waterfall'))" - }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='waterfall'))" - }, - "yperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='waterfall'))" - }, - "yperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='waterfall'))" - }, - "yperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='waterfall'))" + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='histogram'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='histogram'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='histogram'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='histogram'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='histogram'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='histogram'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='histogram'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='histogram'))" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the opacity of the bars.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='histogram'))" + }, + "pattern": { + "bgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='histogram'))" + }, + "description": "Sets the pattern within the marker.", + "editType": "style", + "fgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='histogram'))" + }, + "fgopacity": { + "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_pattern_fgopacity=<VALUE>, selector=dict(type='histogram'))" + }, + "fillmode": { + "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", + "dflt": "replace", + "editType": "style", + "valType": "enumerated", + "values": [ + "replace", + "overlay" + ], + "magic_underscores": "fig.update_traces(marker_pattern_fillmode=<VALUE>, selector=dict(type='histogram'))" + }, + "path": { + "arrayOk": true, + "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "shape": { + "arrayOk": true, + "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", + "dflt": "", + "editType": "style", + "valType": "enumerated", + "values": [ + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." + ], + "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='histogram'))" + }, + "size": { + "arrayOk": true, + "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", + "dflt": 8, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='histogram'))" + }, + "solidity": { + "arrayOk": true, + "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", + "dflt": 0.3, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='histogram'))" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram'))" }, "textangle": { "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.", "dflt": "auto", "editType": "plot", "valType": "angle", - "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='histogram'))" }, "textfont": { "color": { - "arrayOk": true, "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram'))" }, - "description": "Sets the font used for `text`.", - "editType": "calc", + "description": "Sets the text font.", + "editType": "plot", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='waterfall'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "plot", "extras": [ "none" ], @@ -45496,61 +37137,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='waterfall'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram'))" }, "size": { - "arrayOk": true, - "editType": "calc", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='waterfall'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='waterfall'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -45558,18 +37175,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='waterfall'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -45579,18 +37190,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='waterfall'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "extras": [ "normal", "bold" @@ -45598,191 +37203,329 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='waterfall'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='waterfall'))" - }, - "textinfo": { - "arrayOk": false, - "description": "Determines which trace information appear on the graph. In the case of having multiple waterfalls, totals are computed separately (per trace).", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "label", - "text", - "initial", - "delta", - "final" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='waterfall'))" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='waterfall'))" - }, - "cliponaxis": { - "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*.", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram'))" }, - "connector": { - "editType": "plot", - "line": { - "color": { - "description": "Sets the line color.", - "dflt": "#444", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(connector_line_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ], - "magic_underscores": "fig.update_traces(connector_line_dash=<VALUE>, selector=dict(type='waterfall'))" - }, - "editType": "plot", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(connector_line_width=<VALUE>, selector=dict(type='waterfall'))" - }, - "magic_underscores": "fig.update_traces(connector_line=dict(...), selector=dict(type='waterfall'))" + "error_x": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_x_array=<VALUE>, selector=dict(type='histogram'))" }, - "mode": { - "description": "Sets the shape of connector lines.", - "dflt": "between", + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='histogram'))" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(error_x_color=<VALUE>, selector=dict(type='histogram'))" + }, + "copy_ystyle": { "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_copy_ystyle=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_symmetric=<VALUE>, selector=dict(type='histogram'))" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_thickness=<VALUE>, selector=dict(type='histogram'))" + }, + "traceref": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_x_traceref=<VALUE>, selector=dict(type='histogram'))" + }, + "tracerefminus": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_x_tracerefminus=<VALUE>, selector=dict(type='histogram'))" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", "valType": "enumerated", "values": [ - "spanning", - "between" + "percent", + "constant", + "sqrt", + "data" ], - "magic_underscores": "fig.update_traces(connector_mode=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(error_x_type=<VALUE>, selector=dict(type='histogram'))" + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_value=<VALUE>, selector=dict(type='histogram'))" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_valueminus=<VALUE>, selector=dict(type='histogram'))" }, - "role": "object", "visible": { - "description": "Determines if connector lines are drawn. ", - "dflt": true, + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_visible=<VALUE>, selector=dict(type='histogram'))" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_width=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(error_x=dict(...), selector=dict(type='histogram'))" + }, + "error_y": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_y_array=<VALUE>, selector=dict(type='histogram'))" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='histogram'))" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(error_y_color=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(connector_visible=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(error_y_symmetric=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(connector=dict(...), selector=dict(type='waterfall'))" + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_thickness=<VALUE>, selector=dict(type='histogram'))" + }, + "traceref": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_y_traceref=<VALUE>, selector=dict(type='histogram'))" + }, + "tracerefminus": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_y_tracerefminus=<VALUE>, selector=dict(type='histogram'))" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ], + "magic_underscores": "fig.update_traces(error_y_type=<VALUE>, selector=dict(type='histogram'))" + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_value=<VALUE>, selector=dict(type='histogram'))" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_valueminus=<VALUE>, selector=dict(type='histogram'))" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_y_visible=<VALUE>, selector=dict(type='histogram'))" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_width=<VALUE>, selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(error_y=dict(...), selector=dict(type='histogram'))" }, - "constraintext": { - "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", - "dflt": "both", + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "both", - "none" - ], - "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='waterfall'))" + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='histogram'))" }, - "increasing": { + "selected": { "editType": "style", "marker": { "color": { - "arrayOk": false, - "description": "Sets the marker color of all increasing values.", + "description": "Sets the marker color of selected points.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(increasing_marker_color=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='histogram'))" }, "editType": "style", - "line": { - "color": { - "arrayOk": false, - "description": "Sets the line color of all increasing values.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(increasing_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" - }, + "opacity": { + "description": "Sets the marker opacity of selected points.", "editType": "style", - "role": "object", - "width": { - "arrayOk": false, - "description": "Sets the line width of all increasing values.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(increasing_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" - }, - "magic_underscores": "fig.update_traces(increasing_marker_line=dict(...), selector=dict(type='waterfall'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", - "magic_underscores": "fig.update_traces(increasing_marker=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='histogram'))" }, "role": "object", - "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='waterfall'))" + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_textfont_color=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "style", + "role": "object", + "magic_underscores": "fig.update_traces(selected_textfont=dict(...), selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='histogram'))" }, - "decreasing": { + "unselected": { "editType": "style", "marker": { "color": { - "arrayOk": false, - "description": "Sets the marker color of all decreasing values.", + "description": "Sets the marker color of unselected points, applied only when a selection exists.", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(decreasing_marker_color=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='histogram'))" }, "editType": "style", - "line": { - "color": { - "arrayOk": false, - "description": "Sets the line color of all decreasing values.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(decreasing_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" - }, + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", "editType": "style", - "role": "object", - "width": { - "arrayOk": false, - "description": "Sets the line width of all decreasing values.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(decreasing_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" - }, - "magic_underscores": "fig.update_traces(decreasing_marker_line=dict(...), selector=dict(type='waterfall'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", - "magic_underscores": "fig.update_traces(decreasing_marker=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='histogram'))" }, "role": "object", - "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='waterfall'))" + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_textfont_color=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "style", + "role": "object", + "magic_underscores": "fig.update_traces(unselected_textfont=dict(...), selector=dict(type='histogram'))" + }, + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='histogram'))" + }, + "cliponaxis": { + "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*.", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='histogram'))" + }, + "constraintext": { + "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", + "dflt": "both", + "editType": "calc", + "valType": "enumerated", + "values": [ + "inside", + "outside", + "both", + "none" + ], + "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='histogram'))" + }, + "cumulative": { + "currentbin": { + "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.", + "dflt": "include", + "editType": "calc", + "valType": "enumerated", + "values": [ + "include", + "exclude", + "half" + ], + "magic_underscores": "fig.update_traces(cumulative_currentbin=<VALUE>, selector=dict(type='histogram'))" + }, + "direction": { + "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.", + "dflt": "increasing", + "editType": "calc", + "valType": "enumerated", + "values": [ + "increasing", + "decreasing" + ], + "magic_underscores": "fig.update_traces(cumulative_direction=<VALUE>, selector=dict(type='histogram'))" + }, + "editType": "calc", + "enabled": { + "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.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(cumulative_enabled=<VALUE>, selector=dict(type='histogram'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(cumulative=dict(...), selector=dict(type='histogram'))" }, "hoverlabel": { "align": { @@ -45796,36 +37539,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='waterfall'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='waterfall'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='waterfall'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram'))" }, "editType": "none", "font": { @@ -45833,12 +37561,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -45849,12 +37572,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='waterfall'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram'))" }, "lineposition": { "arrayOk": true, @@ -45870,12 +37588,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='waterfall'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "shadow": { @@ -45884,24 +37597,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='waterfall'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='waterfall'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram'))" }, "style": { "arrayOk": true, @@ -45913,12 +37616,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='waterfall'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram'))" }, "textcase": { "arrayOk": true, @@ -45932,12 +37630,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='waterfall'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram'))" }, "variant": { "arrayOk": true, @@ -45953,12 +37646,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='waterfall'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram'))" }, "weight": { "arrayOk": true, @@ -45972,14 +37660,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='waterfall'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram'))" }, "namelength": { "arrayOk": true, @@ -45988,12 +37671,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='waterfall'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "showarrow": { @@ -46001,9 +37679,9 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram'))" }, "insidetextanchor": { "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode.", @@ -46015,41 +37693,28 @@ "middle", "start" ], - "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='histogram'))" }, "insidetextfont": { "color": { - "arrayOk": true, "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='histogram'))" }, "description": "Sets the font used for `text` lying inside the bar.", - "editType": "calc", + "editType": "plot", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='waterfall'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='histogram'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "plot", "extras": [ "none" ], @@ -46059,61 +37724,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='waterfall'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='histogram'))" }, "size": { - "arrayOk": true, - "editType": "calc", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='waterfall'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='histogram'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='waterfall'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='histogram'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -46121,18 +37762,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='waterfall'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='histogram'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -46142,18 +37777,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='waterfall'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='histogram'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "extras": [ "normal", "bold" @@ -46161,48 +37790,30 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='waterfall'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='histogram'))" }, "outsidetextfont": { "color": { - "arrayOk": true, "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='histogram'))" }, "description": "Sets the font used for `text` lying outside the bar.", - "editType": "calc", + "editType": "plot", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='waterfall'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='histogram'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "plot", "extras": [ "none" ], @@ -46212,61 +37823,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='histogram'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='waterfall'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='histogram'))" }, "size": { - "arrayOk": true, - "editType": "calc", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='waterfall'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='histogram'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='waterfall'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='histogram'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -46274,18 +37861,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='waterfall'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='histogram'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -46295,18 +37876,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='waterfall'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='histogram'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "extras": [ "normal", "bold" @@ -46314,100 +37889,92 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='waterfall'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='histogram'))" }, - "totals": { - "editType": "style", - "marker": { - "color": { - "arrayOk": false, - "description": "Sets the marker color of all intermediate sums and total values.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(totals_marker_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "editType": "style", - "line": { - "color": { - "arrayOk": false, - "description": "Sets the line color of all intermediate sums and total values.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(totals_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" - }, - "editType": "style", - "role": "object", - "width": { - "arrayOk": false, - "description": "Sets the line width of all intermediate sums and total values.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(totals_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" - }, - "magic_underscores": "fig.update_traces(totals_marker_line=dict(...), selector=dict(type='waterfall'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(totals_marker=dict(...), selector=dict(type='waterfall'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(totals=dict(...), selector=dict(type='waterfall'))" + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram'))" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='waterfall'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='waterfall'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='waterfall'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='waterfall'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram'))" }, "categories": [ "bar-like", "cartesian", "svg", + "bar", + "histogram", "oriented", - "showLegend", - "zoomScale" + "errorBarsOK", + "showLegend" ], "layoutAttributes": { - "waterfallgap": { + "barcornerradius": { + "description": "Sets the rounding of bar corners. May be an integer number of pixels, or a percentage of bar width (as a string ending in %).", + "editType": "calc", + "valType": "any" + }, + "bargap": { "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates.", "editType": "calc", "max": 1, "min": 0, "valType": "number" }, - "waterfallgroupgap": { + "bargroupgap": { "description": "Sets the gap (in plot fraction) between bars of the same location coordinate.", "dflt": 0, "editType": "calc", @@ -46415,37 +37982,50 @@ "min": 0, "valType": "number" }, - "waterfallmode": { - "description": "Determines how bars at the same location coordinate are displayed on the graph. 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 reduce *opacity* to see multiple bars.", + "barmode": { + "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 reduce *opacity* to see multiple bars.", "dflt": "group", "editType": "calc", "valType": "enumerated", "values": [ + "stack", "group", - "overlay" + "overlay", + "relative" + ] + }, + "barnorm": { + "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.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "", + "fraction", + "percent" ] } }, "meta": { - "description": "Draws waterfall trace which is useful graph to displays the contribution of various elements (either positive or negative) in a bar chart. The data visualized by the span of the bars is set in `y` if `orientation` is set to *v* (the default) and the labels are set in `x`. By setting `orientation` to *h*, the roles are interchanged." + "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." }, - "type": "waterfall" + "type": "histogram" }, - "funnel": { + "histogram2d": { "animatable": false, "attributes": { - "type": "funnel", + "type": "histogram2d", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram2d'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram2d'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -46457,35 +38037,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram2d'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, + "dflt": false, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram2d'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram2d'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram2d'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram2d'))" }, "legendgrouptitle": { "editType": "style", @@ -46493,7 +38073,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram2d'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -46503,7 +38083,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram2d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -46518,7 +38098,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" }, "role": "object", "shadow": { @@ -46526,13 +38106,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram2d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -46543,7 +38123,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram2d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -46556,7 +38136,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" }, "variant": { "description": "Sets the variant of the font.", @@ -46571,7 +38151,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram2d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -46584,9 +38164,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram2d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram2d'))" }, "role": "object", "text": { @@ -46594,16 +38174,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram2d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram2d'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram2d'))" }, "opacity": { "description": "Sets the opacity of the trace.", @@ -46612,161 +38192,65 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram2d'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='funnel'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer", - "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram2d'))" }, "x": { - "description": "Sets the x coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='funnel'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "x0": { - "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", - "dflt": 0, + "description": "Sets the sample data to be binned on the x axis.", "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='funnel'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram2d'))" }, - "dx": { - "description": "Sets the x coordinate step. See `x0` for more info.", - "dflt": 1, - "editType": "calc", + "xgap": { + "description": "Sets the horizontal gap (in pixels) between bricks.", + "dflt": 0, + "editType": "plot", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(xgap=<VALUE>, selector=dict(type='histogram2d'))" }, "y": { - "description": "Sets the y coordinates.", + "description": "Sets the sample data to be binned on the y axis.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='funnel'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram2d'))" }, - "y0": { - "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "ygap": { + "description": "Sets the vertical gap (in pixels) between bricks.", "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any", - "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='funnel'))" - }, - "dy": { - "description": "Sets the y coordinate step. See `y0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='funnel'))" - }, - "width": { - "arrayOk": false, - "description": "Sets the bar width (in position axis units).", - "dflt": null, - "editType": "calc", + "editType": "plot", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='funnel'))" - }, - "offset": { - "arrayOk": false, - "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.", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='funnel'))" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='funnel'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ygap=<VALUE>, selector=dict(type='histogram2d'))" }, - "textposition": { - "arrayOk": true, - "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. If *none*, no text appears.", - "dflt": "auto", + "z": { + "description": "Sets the aggregation data.", "editType": "calc", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "auto", - "none" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='funnel'))" - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='histogram2d'))" }, "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `percentInitial`, `percentPrevious`, `percentTotal`, `label` and `value`.", + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z`", "dflt": "", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram2d'))" }, "texttemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='funnel'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='funnel'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram2d'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -46775,457 +38259,799 @@ "skip" ], "flags": [ - "name", "x", "y", + "z", "text", - "percent initial", - "percent previous", - "percent total" + "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='funnel'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram2d'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `percentInitial`, `percentPrevious` and `percentTotal`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram2d'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='funnel'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram2d'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram2d'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram2d'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='funnel'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram2d'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='funnel'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram2d'))" }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram2d'))" }, "yaxis": { "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", "dflt": "y", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram2d'))" }, - "orientation": { - "description": "Sets the orientation of the funnels. With *v* (*h*), the value of the each bar spans along the vertical (horizontal). By default funnels are tend to be oriented horizontally; unless only *y* array is presented or orientation is set to *v*. Also regarding graphs including only 'horizontal' funnels, *autorange* on the *y-axis* are set to *reversed*.", - "editType": "calc+clearAxisTypes", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='histogram2d'))" + }, + "histfunc": { + "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.", + "dflt": "count", + "editType": "calc", "valType": "enumerated", "values": [ - "v", - "h" + "count", + "sum", + "avg", + "min", + "max" ], - "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram2d'))" }, - "alignmentgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", + "histnorm": { + "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).", "dflt": "", "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='funnel'))" + "valType": "enumerated", + "values": [ + "", + "percent", + "probability", + "density", + "probability density" + ], + "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram2d'))" }, - "offsetgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", - "dflt": "", + "nbinsx": { + "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.", + "dflt": 0, "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='funnel'))" + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram2d'))" }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "nbinsy": { + "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.", "dflt": 0, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='funnel'))" + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram2d'))" }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", + "autobinx": { + "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.", + "dflt": null, "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='funnel'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram2d'))" }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "autobiny": { + "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.", + "dflt": null, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='funnel'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram2d'))" }, - "yperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, + "bingroup": { + "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.", + "dflt": "", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='funnel'))" + "valType": "string", + "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram2d'))" }, - "yperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", - "dflt": "middle", + "xbingroup": { + "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`", + "dflt": "", "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ], - "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='funnel'))" + "valType": "string", + "magic_underscores": "fig.update_traces(xbingroup=<VALUE>, selector=dict(type='histogram2d'))" }, - "yperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "xbins": { "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='funnel'))" + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram2d'))" + }, + "role": "object", + "size": { + "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram2d'))" + }, + "start": { + "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. ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram2d'))" + }, + "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram2d'))" + }, + "ybingroup": { + "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`", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(ybingroup=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ybins": { + "editType": "calc", + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram2d'))" + }, + "role": "object", + "size": { + "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram2d'))" + }, + "start": { + "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. ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram2d'))" + }, + "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram2d'))" }, "marker": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, + "color": { + "description": "Sets the aggregation data.", "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram2d'))" + }, + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram2d'))" + }, + "textfont": { + "color": { + "dflt": "auto", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram2d'))" + }, + "description": "Sets the text font.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram2d'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram2d'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram2d'))" + }, + "size": { + "dflt": "auto", + "editType": "plot", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram2d'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram2d'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram2d'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram2d'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram2d'))" + }, + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram2d'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='histogram2d'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='histogram2d'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='histogram2d'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='histogram2d'))" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='histogram2d'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='histogram2d'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='histogram2d'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='histogram2d'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='histogram2d'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='histogram2d'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='histogram2d'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram2d'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram2d'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='histogram2d'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='histogram2d'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='histogram2d'))" }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='funnel'))" + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram2d'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram2d'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='histogram2d'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='funnel'))" + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='histogram2d'))" }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='funnel'))" + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='histogram2d'))" }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='funnel'))" + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='histogram2d'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='funnel'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", + "tickfont": { + "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='funnel'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='funnel'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram2d'))" }, + "description": "Sets the color bar's tick label font", "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='funnel'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='funnel'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='funnel'))" + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram2d'))" }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='funnel'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='funnel'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='funnel'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" + "flags": [ + "under", + "over", + "through" ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='funnel'))" + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram2d'))" }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='funnel'))" + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram2d'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, + "size": { "editType": "colorbars", - "min": 0, + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='funnel'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram2d'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='funnel'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram2d'))" }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram2d'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='funnel'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram2d'))" }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "extras": [ + "normal", + "bold" ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='funnel'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='funnel'))" + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram2d'))" }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='histogram2d'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='funnel'))" + "role": "object", + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='histogram2d'))" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "tickfont": { + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram2d'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='histogram2d'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='histogram2d'))" + }, + "title": { + "editType": "colorbars", + "font": { "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='histogram2d'))" }, - "description": "Sets the color bar's tick label font", + "description": "Sets this color bar's title font.", "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", @@ -47233,7 +39059,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='histogram2d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -47248,7 +39074,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" }, "role": "object", "shadow": { @@ -47256,13 +39082,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='histogram2d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -47273,7 +39099,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='histogram2d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -47281,1089 +39107,965 @@ "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='funnel'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='funnel'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='funnel'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='funnel'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='funnel'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='funnel'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='funnel'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='funnel'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='funnel'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='funnel'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='funnel'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='funnel'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='funnel'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='funnel'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='funnel'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='funnel'))" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='funnel'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='funnel'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='funnel'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='funnel'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='funnel'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='funnel'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='funnel'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='funnel'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='funnel'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='funnel'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='funnel'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='funnel'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='funnel'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='funnel'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='funnel'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='funnel'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='funnel'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='funnel'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='funnel'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='funnel'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='funnel'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='funnel'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='funnel'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='funnel'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='funnel'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='funnel'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='funnel'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram2d'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='funnel'))" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='funnel'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='funnel'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram2d'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='funnel'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='histogram2d'))" }, "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='funnel'))" + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='histogram2d'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='histogram2d'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='histogram2d'))" }, - "opacity": { - "arrayOk": true, - "description": "Sets the opacity of the bars.", - "dflt": 1, - "editType": "style", - "max": 1, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='histogram2d'))" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='histogram2d'))" + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='histogram2d'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='histogram2d'))" }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='funnel'))" + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='histogram2d'))" }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='funnel'))" + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='histogram2d'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='funnel'))" - }, - "textangle": { - "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.", - "dflt": 0, - "editType": "plot", - "valType": "angle", - "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='funnel'))" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='funnel'))" + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='histogram2d'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='histogram2d'))" }, - "description": "Sets the font used for `text`.", + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='histogram2d'))" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": false, "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='funnel'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='histogram2d'))" + }, + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='funnel'))" + "valType": "colorscale", + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='histogram2d'))" + }, + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='histogram2d'))" + }, + "reversescale": { + "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.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zauto": { + "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.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zmax": { + "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.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "zauto": false, + "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='funnel'))" + "valType": "number", + "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zmid": { + "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`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "valType": "number", + "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zmin": { + "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.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "zauto": false, + "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='histogram2d'))" }, - "size": { + "valType": "number", + "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='histogram2d'))" + }, + "zsmooth": { + "description": "Picks a smoothing algorithm use to smooth `z` data.", + "dflt": false, + "editType": "calc", + "valType": "enumerated", + "values": [ + "fast", + "best", + false + ], + "magic_underscores": "fig.update_traces(zsmooth=<VALUE>, selector=dict(type='histogram2d'))" + }, + "hoverlabel": { + "align": { "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='funnel'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "left", + "right", + "auto" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='funnel'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram2d'))" }, - "textcase": { + "bgcolor": { "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "description": "Sets the background color of the hover labels for this trace", "editType": "none", - "valType": "string" + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram2d'))" }, - "variant": { + "bordercolor": { "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='funnel'))" + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram2d'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram2d'))" + }, + "description": "Sets the font used in hover labels.", "editType": "none", - "valType": "string" + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram2d'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram2d'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram2d'))" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram2d'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram2d'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram2d'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram2d'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram2d'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram2d'))" }, - "weight": { + "namelength": { "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram2d'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram2d'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram2d'))" }, - "textinfo": { - "arrayOk": false, - "description": "Determines which trace information appear on the graph. In the case of having multiple funnels, percentages & totals are computed separately (per trace).", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "label", - "text", - "percent initial", - "percent previous", - "percent total", - "value" + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram2d'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram2d'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram2d'))" }, - "cliponaxis": { - "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*.", - "dflt": true, + "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram2d'))" + }, + "categories": [ + "cartesian", + "svg", + "2dMap", + "histogram", + "showLegend" + ], + "meta": { + "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.", + "hrName": "histogram_2d" + }, + "type": "histogram2d" + }, + "histogram2dcontour": { + "animatable": false, + "attributes": { + "type": "histogram2dcontour", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "connector": { - "editType": "plot", - "fillcolor": { - "description": "Sets the fill color.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(connector_fillcolor=<VALUE>, selector=dict(type='funnel'))" - }, - "line": { + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { "color": { - "description": "Sets the line color.", - "dflt": "#444", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(connector_line_color=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "style", + "noBlank": true, + "strict": true, "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(connector_line_dash=<VALUE>, selector=dict(type='funnel'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "editType": "style", "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 0, - "editType": "plot", - "min": 0, + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "size": { + "editType": "style", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(connector_line_width=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(connector_line=dict(...), selector=dict(type='funnel'))" + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='histogram2dcontour'))" }, "role": "object", - "visible": { - "description": "Determines if connector regions and lines are drawn.", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(connector_visible=<VALUE>, selector=dict(type='funnel'))" + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(connector=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='histogram2dcontour'))" }, - "constraintext": { - "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", - "dflt": "both", + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "x": { + "description": "Sets the sample data to be binned on the x axis.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "y": { + "description": "Sets the sample data to be binned on the y axis.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "z": { + "description": "Sets the aggregation data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "texttemplate": { + "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `z` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "text", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `z` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "histfunc": { + "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.", + "dflt": "count", "editType": "calc", "valType": "enumerated", "values": [ - "inside", - "outside", - "both", - "none" + "count", + "sum", + "avg", + "min", + "max" ], - "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(histfunc=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='funnel'))" + "histnorm": { + "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).", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "", + "percent", + "probability", + "density", + "probability density" + ], + "magic_underscores": "fig.update_traces(histnorm=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "nbinsx": { + "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.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsx=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "nbinsy": { + "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.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(nbinsy=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "autobinx": { + "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.", + "dflt": null, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobinx=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "autobiny": { + "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.", + "dflt": null, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(autobiny=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "bingroup": { + "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.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(bingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "xbingroup": { + "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`", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(xbingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "xbins": { + "editType": "calc", + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_end=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "role": "object", + "size": { + "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='funnel'))" + "start": { + "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. ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xbins_start=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(xbins=dict(...), selector=dict(type='histogram2dcontour'))" + }, + "ybingroup": { + "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`", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(ybingroup=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ybins": { + "editType": "calc", + "end": { + "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.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_end=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='funnel'))" + "role": "object", + "size": { + "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* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "start": { + "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. ", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(ybins_start=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='funnel'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='funnel'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='funnel'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='funnel'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='funnel'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='funnel'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='funnel'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='funnel'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(ybins=dict(...), selector=dict(type='histogram2dcontour'))" + }, + "marker": { + "color": { + "description": "Sets the aggregation data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='funnel'))" + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='histogram2dcontour'))" + }, + "line": { + "color": { + "description": "Sets the color of the contour level. Has no effect if `contours.coloring` is set to *lines*.", + "editType": "style+colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='histogram2dcontour'))" }, + "editType": "plot", "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='funnel'))" + "smoothing": { + "description": "Sets the amount of smoothing for the contour lines, where *0* corresponds to no smoothing.", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_smoothing=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='funnel'))" - }, - "insidetextanchor": { - "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode.", - "dflt": "middle", - "editType": "plot", - "valType": "enumerated", - "values": [ - "end", - "middle", - "start" - ], - "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='funnel'))" + "width": { + "description": "Sets the contour line width in (in px)", + "dflt": 0.5, + "editType": "style+colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='histogram2dcontour'))" }, - "insidetextfont": { + "textfont": { "color": { - "arrayOk": true, + "dflt": "auto", "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='funnel'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "description": "Sets the font used for `text` lying inside the bar.", - "editType": "calc", + "description": "For this trace it only has an effect if `coloring` is set to *heatmap*. Sets the text font.", + "editType": "plot", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='funnel'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "plot", "extras": [ "none" ], @@ -48373,61 +40075,38 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='funnel'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='funnel'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "size": { - "arrayOk": true, - "editType": "calc", + "dflt": "auto", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='funnel'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='funnel'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -48435,18 +40114,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -48456,18 +40129,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='funnel'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "extras": [ "normal", "bold" @@ -48475,290 +40142,245 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='funnel'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='histogram2dcontour'))" }, - "outsidetextfont": { - "color": { - "arrayOk": true, - "editType": "style", + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "description": "Sets the font used for `text` lying outside the bar.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='funnel'))" + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='funnel'))" + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "italic" + "h", + "v" + ], + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='funnel'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='funnel'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='funnel'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='funnel'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='funnel'))" + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='funnel'))" + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='funnel'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='funnel'))" - }, - "categories": [ - "bar-like", - "cartesian", - "svg", - "oriented", - "showLegend", - "zoomScale" - ], - "layoutAttributes": { - "funnelgap": { - "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "funnelgroupgap": { - "description": "Sets the gap (in plot fraction) between bars of the same location coordinate.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "funnelmode": { - "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 *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 reduce *opacity* to see multiple bars.", - "dflt": "stack", - "editType": "calc", - "valType": "enumerated", - "values": [ - "stack", - "group", - "overlay" - ] - } - }, - "meta": { - "description": "Visualize stages in a process using length-encoded bars. This trace can be used to show data in either a part-to-whole representation wherein each item appears in a single stage, or in a \"drop-off\" representation wherein each item appears in each stage it traversed. See also the \"funnelarea\" trace type for a different approach to visualizing funnel data." - }, - "type": "funnel" - }, - "funnelarea": { - "animatable": false, - "attributes": { - "type": "funnelarea", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='funnelarea'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='funnelarea'))" - }, - "title": { - "editType": "plot", - "font": { + "tickfont": { "color": { - "arrayOk": true, - "editType": "plot", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(title_font_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "description": "Sets the font used for `title`.", - "editType": "plot", + "description": "Sets the color bar's tick label font", + "editType": "colorbars", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(title_font_family=<VALUE>, selector=dict(type='funnelarea'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "plot", + "editType": "colorbars", "extras": [ "none" ], @@ -48768,896 +40390,741 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(title_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='histogram2dcontour'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='histogram2dcontour'))" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='histogram2dcontour'))" }, "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(title_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(title_font_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(title_font_style=<VALUE>, selector=dict(type='funnelarea'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(title_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(title_font_variant=<VALUE>, selector=dict(type='funnelarea'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" + "right", + "top", + "bottom" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(title_font_weight=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(title_font=dict(...), selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='histogram2dcontour'))" }, - "position": { - "description": "Specifies the location of the `title`.", - "dflt": "top center", - "editType": "plot", + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "top left", - "top center", - "top right" + "left", + "center", + "right" ], - "magic_underscores": "fig.update_traces(title_position=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "role": "object", - "text": { - "description": "Sets the title of the chart. If it is empty, no title is displayed.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(title_text=<VALUE>, selector=dict(type='funnelarea'))" + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(title=dict(...), selector=dict(type='funnelarea'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='funnelarea'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='funnelarea'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='funnelarea'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='funnelarea'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='funnelarea'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='funnelarea'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='funnelarea'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='funnelarea'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='funnelarea'))" + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='funnelarea'))" + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='funnelarea'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='funnelarea'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='funnelarea'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='funnelarea'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "values": { - "description": "Sets the values of the sectors. If omitted, we count occurrences of each label.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='funnelarea'))" - }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, - "labels": { - "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='funnelarea'))" - }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, - "dlabel": { - "description": "Sets the label step. See `label0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(dlabel=<VALUE>, selector=dict(type='funnelarea'))" + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='histogram2dcontour'))" }, - "label0": { - "description": "Alternate to `labels`. Builds a numeric set of labels. Use with `dlabel` where `label0` is the starting label and `dlabel` the step.", - "dflt": 0, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(label0=<VALUE>, selector=dict(type='funnelarea'))" - }, - "text": { - "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "editType": "plot", - "valType": "data_array", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "textposition": { - "arrayOk": true, - "description": "Specifies the location of the `textinfo`.", - "dflt": "inside", - "editType": "plot", - "valType": "enumerated", - "values": [ - "inside", - "none" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `text` and `percent`.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='funnelarea'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='funnelarea'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='funnelarea'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "label", - "text", - "value", - "percent", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='funnelarea'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `text` and `percent`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='funnelarea'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='funnelarea'))" + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "reversescale": { + "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.", + "dflt": false, "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='funnelarea'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "zauto": { + "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.", + "dflt": true, "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='funnelarea'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", "editType": "none", - "valType": "string" + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this funnelarea trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='funnelarea'))" + "zmax": { + "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.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "zauto": false, + "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" }, + "valType": "number", + "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "zmid": { + "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`.", + "dflt": null, "editType": "calc", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this funnelarea trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='funnelarea'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "x": { - "description": "Sets the horizontal domain of this funnelarea trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='funnelarea'))" + "valType": "number", + "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "zmin": { + "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.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "zauto": false, + "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "y": { - "description": "Sets the vertical domain of this funnelarea trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='funnelarea'))" + "valType": "number", + "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "autocontour": { + "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`.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocontour_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='funnelarea'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocontour=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "marker": { - "colors": { - "description": "Sets the color of each sector. If not specified, the default trace color set is used to pick the sector colors.", + "contours": { + "coloring": { + "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.", + "dflt": "fill", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" + "valType": "enumerated", + "values": [ + "fill", + "heatmap", + "lines", + "none" + ], + "magic_underscores": "fig.update_traces(contours_coloring=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "editType": "calc", - "line": { - "color": { - "arrayOk": true, - "description": "Sets the color of the line enclosing each sector. Defaults to the `paper_bgcolor` value.", - "dflt": null, - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "end": { + "description": "Sets the end contour level value. Must be more than `contours.start`", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "^autocontour": false, + "magic_underscores": "fig.update_traces(contours_end_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_end=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "impliedEdits": { + "autocontour": false, "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the line enclosing each sector.", - "dflt": 1, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='funnelarea'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(contours_impliedEdits=dict(...), selector=dict(type='histogram2dcontour'))" }, - "pattern": { - "bgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "labelfont": { + "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(contours_labelfont_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "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`.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(contours_labelfont_family=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "description": "Sets the pattern within the marker.", - "editType": "style", - "fgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='funnelarea'))" + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(contours_labelfont_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(contours_labelfont_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "fgopacity": { - "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", - "editType": "style", - "max": 1, - "min": 0, + "size": { + "editType": "plot", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_fgopacity=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(contours_labelfont_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "fillmode": { - "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", - "dflt": "replace", - "editType": "style", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", "valType": "enumerated", "values": [ - "replace", - "overlay" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_pattern_fillmode=<VALUE>, selector=dict(type='funnelarea'))" - }, - "path": { - "arrayOk": true, - "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='funnelarea'))" - }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_labelfont_style=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "role": "object", - "shape": { - "arrayOk": true, - "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", - "dflt": "", - "editType": "style", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", "valType": "enumerated", "values": [ - "", - "/", - "\\", - "x", - "-", - "|", - "+", - "." + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='funnelarea'))" - }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", - "dflt": 8, - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_labelfont_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "solidity": { - "arrayOk": true, - "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", - "dflt": 0.3, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='funnelarea'))" + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(contours_labelfont_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(contours_labelfont_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='funnelarea'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='funnelarea'))" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_labelfont=dict(...), selector=dict(type='histogram2dcontour'))" }, - "description": "Sets the font used for `textinfo`.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "labelformat": { + "description": "Sets the contour label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", + "dflt": "", "editType": "plot", - "noBlank": true, - "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='funnelarea'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_labelformat=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "operation": { + "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.", + "dflt": "=", + "editType": "calc", + "valType": "enumerated", + "values": [ + "=", + "<", + ">=", + ">", + "<=", + "[]", + "()", + "[)", + "(]", + "][", + ")(", + "](", + ")[" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='funnelarea'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_operation=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", + "showlabels": { + "description": "Determines whether to label the contour lines with their values.", + "dflt": false, "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='funnelarea'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_showlabels=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "showlines": { + "description": "Determines whether or not the contour lines are drawn. Has an effect only if `contours.coloring` is set to *fill*.", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_showlines=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "size": { - "arrayOk": true, + "description": "Sets the step between each contour level. Must be positive.", + "dflt": null, "editType": "plot", - "min": 1, + "impliedEdits": { + "^autocontour": false, + "magic_underscores": "fig.update_traces(contours_size_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='funnelarea'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='funnelarea'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(contours_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", + "start": { + "description": "Sets the starting contour level value. Must be less than `contours.end`", + "dflt": null, "editType": "plot", - "extras": [ - "normal", - "bold" + "impliedEdits": { + "^autocontour": false, + "magic_underscores": "fig.update_traces(contours_start_impliedEdits=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_start=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "type": { + "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.", + "dflt": "levels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "levels", + "constraint" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(contours_type=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "value": { + "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.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(contours_value=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='funnelarea'))" - }, - "textinfo": { - "description": "Determines which trace information appear on the graph.", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "label", - "text", - "value", - "percent" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='funnelarea'))" - }, - "aspectratio": { - "description": "Sets the ratio between height and width", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(aspectratio=<VALUE>, selector=dict(type='funnelarea'))" - }, - "baseratio": { - "description": "Sets the ratio between bottom length and maximum top length.", - "dflt": 0.333, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(baseratio=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(contours=dict(...), selector=dict(type='histogram2dcontour'))" }, "hoverlabel": { "align": { @@ -49671,36 +41138,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='funnelarea'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='funnelarea'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='funnelarea'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "editType": "none", "font": { @@ -49708,12 +41160,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -49724,12 +41171,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='funnelarea'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "lineposition": { "arrayOk": true, @@ -49745,12 +41187,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "role": "object", "shadow": { @@ -49759,24 +41196,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "style": { "arrayOk": true, @@ -49788,12 +41215,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='funnelarea'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "textcase": { "arrayOk": true, @@ -49807,12 +41229,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "variant": { "arrayOk": true, @@ -49828,12 +41245,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='funnelarea'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "weight": { "arrayOk": true, @@ -49847,14 +41259,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='funnelarea'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='histogram2dcontour'))" }, "namelength": { "arrayOk": true, @@ -49863,12 +41270,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='funnelarea'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "role": "object", "showarrow": { @@ -49876,370 +41278,105 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='histogram2dcontour'))" }, - "insidetextfont": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='funnelarea'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used for `textinfo` lying inside the sector.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='funnelarea'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='funnelarea'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='funnelarea'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='funnelarea'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='funnelarea'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='funnelarea'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='funnelarea'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='funnelarea'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='funnelarea'))" + "ncontours": { + "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.", + "dflt": 15, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(ncontours=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "scalegroup": { - "description": "If there are multiple funnelareas that should be sized according to their totals, link them by providing a non-empty group id here shared by every trace in the same group.", - "dflt": "", + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(scalegroup=<VALUE>, selector=dict(type='funnelarea'))" + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='histogram2dcontour'))" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='histogram2dcontour'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='funnelarea'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='funnelarea'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='funnelarea'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='histogram2dcontour'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='funnelarea'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='histogram2dcontour'))" }, "categories": [ - "pie-like", - "funnelarea", + "cartesian", + "svg", + "2dMap", + "contour", + "histogram", "showLegend" ], - "layoutAttributes": { - "extendfunnelareacolors": { - "description": "If `true`, the funnelarea slice colors (whether given by `funnelareacolorway` or inherited from `colorway`) will be extended to three times its original length by first repeating every color 20% lighter then each color 20% darker. This is intended to reduce the likelihood of reusing the same color when you have many slices, but you can set `false` to disable. Colors provided in the trace, using `marker.colors`, are never extended.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "funnelareacolorway": { - "description": "Sets the default funnelarea slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendfunnelareacolors`.", - "editType": "calc", - "valType": "colorlist" - }, - "hiddenlabels": { - "description": "hiddenlabels is the funnelarea & pie chart analog of visible:'legendonly' but it can contain many labels, and can simultaneously hide slices from several pies/funnelarea charts", - "editType": "calc", - "valType": "data_array" - }, - "hiddenlabelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hiddenlabels`.", - "editType": "none", - "valType": "string" - } - }, "meta": { - "description": "Visualize stages in a process using area-encoded trapezoids. This trace can be used to show data in a part-to-whole representation similar to a \"pie\" trace, wherein each item appears in a single stage. See also the \"funnel\" trace type for a different approach to visualizing funnel data." + "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.", + "hrName": "histogram_2d_contour" }, - "type": "funnelarea" + "type": "histogram2dcontour" }, - "indicator": { - "animatable": true, + "ohlc": { + "animatable": false, "attributes": { - "type": "indicator", + "type": "ohlc", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='ohlc'))" }, "uid": { - "anim": true, "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='indicator'))" - }, - "title": { - "align": { - "description": "Sets the horizontal alignment of the title. It defaults to `center` except for bullet charts for which it defaults to right.", - "editType": "plot", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(title_align=<VALUE>, selector=dict(type='indicator'))" - }, - "editType": "plot", - "font": { - "color": { - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(title_font_color=<VALUE>, selector=dict(type='indicator'))" - }, - "description": "Set the font used to display the title", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(title_font_family=<VALUE>, selector=dict(type='indicator'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(title_font_lineposition=<VALUE>, selector=dict(type='indicator'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(title_font_shadow=<VALUE>, selector=dict(type='indicator'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(title_font_size=<VALUE>, selector=dict(type='indicator'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(title_font_style=<VALUE>, selector=dict(type='indicator'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(title_font_textcase=<VALUE>, selector=dict(type='indicator'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(title_font_variant=<VALUE>, selector=dict(type='indicator'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(title_font_weight=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(title_font=dict(...), selector=dict(type='indicator'))" - }, - "role": "object", - "text": { - "description": "Sets the title of this indicator.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(title_text=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(title=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='ohlc'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -50251,21 +41388,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='ohlc'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='ohlc'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='ohlc'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='ohlc'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='ohlc'))" }, "legendgrouptitle": { "editType": "style", @@ -50273,7 +41424,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='ohlc'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -50283,7 +41434,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='ohlc'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -50298,7 +41449,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='ohlc'))" }, "role": "object", "shadow": { @@ -50306,13 +41457,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='ohlc'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='ohlc'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -50323,7 +41474,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='ohlc'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -50336,7 +41487,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='ohlc'))" }, "variant": { "description": "Sets the variant of the font.", @@ -50351,7 +41502,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='ohlc'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -50364,9 +41515,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='ohlc'))" }, "role": "object", "text": { @@ -50374,361 +41525,352 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='ohlc'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='ohlc'))" }, - "mode": { - "description": "Determines how the value is displayed on the graph. `number` displays the value numerically in text. `delta` displays the difference to a reference value in text. Finally, `gauge` displays the value graphically on an axis.", - "dflt": "number", - "editType": "calc", - "flags": [ - "number", - "delta", - "gauge" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='indicator'))" + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='ohlc'))" }, "ids": { - "anim": true, "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='ohlc'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer", + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='ohlc'))" }, - "value": { - "anim": true, - "description": "Sets the number to be displayed.", + "x": { + "description": "Sets the x coordinates. If absent, linear coordinate will be generated.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='ohlc'))" + }, + "close": { + "description": "Sets the close values.", "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='indicator'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(close=<VALUE>, selector=dict(type='ohlc'))" + }, + "open": { + "description": "Sets the open values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(open=<VALUE>, selector=dict(type='ohlc'))" + }, + "high": { + "description": "Sets the high values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(high=<VALUE>, selector=dict(type='ohlc'))" + }, + "low": { + "description": "Sets the low values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(low=<VALUE>, selector=dict(type='ohlc'))" + }, + "text": { + "arrayOk": true, + "description": "Sets hover text elements associated with each sample point. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to this trace's sample points.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='ohlc'))" + }, + "hovertext": { + "arrayOk": true, + "description": "Same as `text`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='ohlc'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "text", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='ohlc'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `open`, `high`, `low` and `close`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='ohlc'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='ohlc'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='ohlc'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='ohlc'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='indicator'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='ohlc'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='ohlc'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='ohlc'))" }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this indicator trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='indicator'))" - }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='ohlc'))" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, "editType": "calc", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this indicator trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='indicator'))" - }, - "x": { - "description": "Sets the horizontal domain of this indicator trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='indicator'))" - }, - "y": { - "description": "Sets the vertical domain of this indicator trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='indicator'))" + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='ohlc'))" }, - "align": { - "description": "Sets the horizontal alignment of the `text` within the box. Note that this attribute has no effect if an angular gauge is displayed: in this case, it is always centered", - "editType": "plot", + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", "valType": "enumerated", "values": [ - "left", - "center", - "right" + "start", + "middle", + "end" ], - "magic_underscores": "fig.update_traces(align=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='ohlc'))" }, - "delta": { - "decreasing": { - "color": { - "description": "Sets the color for increasing value.", - "dflt": "#FF4136", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(delta_decreasing_color=<VALUE>, selector=dict(type='indicator'))" - }, - "editType": "plot", - "role": "object", - "symbol": { - "description": "Sets the symbol to display for increasing value", - "dflt": "\u25bc", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(delta_decreasing_symbol=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(delta_decreasing=dict(...), selector=dict(type='indicator'))" + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='ohlc'))" + }, + "line": { + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*). Note that this style setting can also be set per direction via `increasing.line.dash` and `decreasing.line.dash`.", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='ohlc'))" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width (in px). Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`.", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='ohlc'))" }, + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='ohlc'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", - "font": { + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='ohlc'))" + }, + "increasing": { + "editType": "style", + "line": { "color": { - "editType": "plot", + "description": "Sets the line color.", + "dflt": "#3D9970", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(delta_font_color=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(increasing_line_color=<VALUE>, selector=dict(type='ohlc'))" }, - "description": "Set the font used to display the delta", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(delta_font_family=<VALUE>, selector=dict(type='indicator'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(delta_font_lineposition=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(increasing_line_dash=<VALUE>, selector=dict(type='ohlc'))" }, + "editType": "style", "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(delta_font_shadow=<VALUE>, selector=dict(type='indicator'))" - }, - "size": { - "editType": "plot", - "min": 1, + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "style", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(delta_font_size=<VALUE>, selector=dict(type='indicator'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(delta_font_style=<VALUE>, selector=dict(type='indicator'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(delta_font_textcase=<VALUE>, selector=dict(type='indicator'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(delta_font_variant=<VALUE>, selector=dict(type='indicator'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(delta_font_weight=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(increasing_line_width=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(delta_font=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(increasing_line=dict(...), selector=dict(type='ohlc'))" }, - "increasing": { + "role": "object", + "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='ohlc'))" + }, + "decreasing": { + "editType": "style", + "line": { "color": { - "description": "Sets the color for increasing value.", - "dflt": "#3D9970", - "editType": "plot", + "description": "Sets the line color.", + "dflt": "#FF4136", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(delta_increasing_color=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(decreasing_line_color=<VALUE>, selector=dict(type='ohlc'))" }, - "editType": "plot", - "role": "object", - "symbol": { - "description": "Sets the symbol to display for increasing value", - "dflt": "\u25b2", - "editType": "plot", + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(delta_increasing_symbol=<VALUE>, selector=dict(type='indicator'))" + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(decreasing_line_dash=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(delta_increasing=dict(...), selector=dict(type='indicator'))" - }, - "position": { - "description": "Sets the position of delta with respect to the number.", - "dflt": "bottom", - "editType": "plot", - "valType": "enumerated", - "values": [ - "top", - "bottom", - "left", - "right" - ], - "magic_underscores": "fig.update_traces(delta_position=<VALUE>, selector=dict(type='indicator'))" - }, - "prefix": { - "description": "Sets a prefix appearing before the delta.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(delta_prefix=<VALUE>, selector=dict(type='indicator'))" - }, - "reference": { - "description": "Sets the reference value to compute the delta. By default, it is set to the current value.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(delta_reference=<VALUE>, selector=dict(type='indicator'))" + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(decreasing_line_width=<VALUE>, selector=dict(type='ohlc'))" + }, + "magic_underscores": "fig.update_traces(decreasing_line=dict(...), selector=dict(type='ohlc'))" }, - "relative": { - "description": "Show relative change", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(delta_relative=<VALUE>, selector=dict(type='indicator'))" + "role": "object", + "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='ohlc'))" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ], + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='ohlc'))" }, - "role": "object", - "suffix": { - "description": "Sets a suffix appearing next to the delta.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(delta_suffix=<VALUE>, selector=dict(type='indicator'))" + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='ohlc'))" }, - "valueformat": { - "description": "Sets the value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(delta_valueformat=<VALUE>, selector=dict(type='indicator'))" + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(delta=dict(...), selector=dict(type='indicator'))" - }, - "number": { - "editType": "plot", + "editType": "none", "font": { "color": { - "editType": "plot", + "arrayOk": true, + "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(number_font_color=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='ohlc'))" }, - "description": "Set the font used to display main number", - "editType": "plot", + "description": "Sets the font used in hover labels.", + "editType": "none", "family": { + "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", + "editType": "none", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(number_font_family=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='ohlc'))" }, "lineposition": { + "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "plot", + "editType": "none", "extras": [ "none" ], @@ -50738,37 +41880,41 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(number_font_lineposition=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='ohlc'))" }, "role": "object", "shadow": { + "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "plot", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(number_font_shadow=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='ohlc'))" }, "size": { - "editType": "plot", + "arrayOk": true, + "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(number_font_size=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='ohlc'))" }, "style": { + "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "plot", + "editType": "none", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(number_font_style=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='ohlc'))" }, "textcase": { + "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "plot", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -50776,12 +41922,13 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(number_font_textcase=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='ohlc'))" }, "variant": { + "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "plot", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -50791,12 +41938,13 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(number_font_variant=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='ohlc'))" }, "weight": { + "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "plot", + "editType": "none", "extras": [ "normal", "bold" @@ -50804,668 +41952,772 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(number_font_weight=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(number_font=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='ohlc'))" }, - "prefix": { - "description": "Sets a prefix appearing before the number.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(number_prefix=<VALUE>, selector=dict(type='indicator'))" + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='ohlc'))" }, "role": "object", - "suffix": { - "description": "Sets a suffix appearing next to the number.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(number_suffix=<VALUE>, selector=dict(type='indicator'))" + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='ohlc'))" }, - "valueformat": { - "description": "Sets the value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(number_valueformat=<VALUE>, selector=dict(type='indicator'))" + "split": { + "description": "Show hover information (open, close, high, low) in separate labels, rather than a single unified label. Default: *false*. When set to *true*, `hovertemplate` is ignored.", + "dflt": false, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_split=<VALUE>, selector=dict(type='ohlc'))" }, - "magic_underscores": "fig.update_traces(number=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='ohlc'))" }, - "gauge": { - "axis": { - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "plot", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(gauge_axis_dtick_impliedEdits=<VALUE>, selector=dict(type='indicator'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(gauge_axis_dtick=<VALUE>, selector=dict(type='indicator'))" - }, - "editType": "plot", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "plot", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(gauge_axis_exponentformat=<VALUE>, selector=dict(type='indicator'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(gauge_axis_labelalias=<VALUE>, selector=dict(type='indicator'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_axis_minexponent=<VALUE>, selector=dict(type='indicator'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(gauge_axis_nticks=<VALUE>, selector=dict(type='indicator'))" - }, - "range": { - "description": "Sets the range of this axis.", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "number" - }, - { - "editType": "plot", - "valType": "number" - } - ], - "valType": "info_array", - "magic_underscores": "fig.update_traces(gauge_axis_range=list(...), selector=dict(type='indicator'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(gauge_axis_separatethousands=<VALUE>, selector=dict(type='indicator'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "plot", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(gauge_axis_showexponent=<VALUE>, selector=dict(type='indicator'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(gauge_axis_showticklabels=<VALUE>, selector=dict(type='indicator'))" + "tickwidth": { + "description": "Sets the width of the open/close tick marks relative to the *x* minimal interval.", + "dflt": 0.3, + "editType": "calc", + "max": 0.5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(tickwidth=<VALUE>, selector=dict(type='ohlc'))" + }, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='ohlc'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='ohlc'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='ohlc'))" + }, + "categories": [ + "cartesian", + "svg", + "showLegend" + ], + "meta": { + "description": "The ohlc (short for Open-High-Low-Close) is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The tip of the lines represent the `low` and `high` values and the horizontal segments represent the `open` and `close` values. Sample points where the close value is higher (lower) than the open value are called increasing (decreasing). By default, increasing items are drawn in green whereas decreasing are drawn in red." + }, + "type": "ohlc" + }, + "candlestick": { + "animatable": false, + "attributes": { + "type": "candlestick", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='candlestick'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='candlestick'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='candlestick'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='candlestick'))" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='candlestick'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='candlestick'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='candlestick'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='candlestick'))" }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "plot", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(gauge_axis_showtickprefix=<VALUE>, selector=dict(type='indicator'))" + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='candlestick'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "plot", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ "none" ], - "magic_underscores": "fig.update_traces(gauge_axis_showticksuffix=<VALUE>, selector=dict(type='indicator'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "plot", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(gauge_axis_tick0_impliedEdits=<VALUE>, selector=dict(type='indicator'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(gauge_axis_tick0=<VALUE>, selector=dict(type='indicator'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "plot", - "valType": "angle", - "magic_underscores": "fig.update_traces(gauge_axis_tickangle=<VALUE>, selector=dict(type='indicator'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_axis_tickcolor=<VALUE>, selector=dict(type='indicator'))" - }, - "tickfont": { - "color": { - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_color=<VALUE>, selector=dict(type='indicator'))" - }, - "description": "Sets the color bar's tick label font", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_family=<VALUE>, selector=dict(type='indicator'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_lineposition=<VALUE>, selector=dict(type='indicator'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_shadow=<VALUE>, selector=dict(type='indicator'))" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_size=<VALUE>, selector=dict(type='indicator'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_style=<VALUE>, selector=dict(type='indicator'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_textcase=<VALUE>, selector=dict(type='indicator'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_variant=<VALUE>, selector=dict(type='indicator'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(gauge_axis_tickfont_weight=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(gauge_axis_tickfont=dict(...), selector=dict(type='indicator'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(gauge_axis_tickformat=<VALUE>, selector=dict(type='indicator'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='candlestick'))" }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "any" - }, - { - "editType": "plot", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "plot", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "plot", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "plot", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "plot", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(gauge_axis_tickformatstops=list(...), selector=dict(type='indicator'))" + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='candlestick'))" }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "plot", + "size": { + "editType": "style", "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(gauge_axis_ticklabelstep=<VALUE>, selector=dict(type='indicator'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "plot", - "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(gauge_axis_ticklen=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='candlestick'))" }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "plot", - "impliedEdits": { - "magic_underscores": "fig.update_traces(gauge_axis_tickmode_impliedEdits=<VALUE>, selector=dict(type='indicator'))" - }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "auto", - "linear", - "array" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(gauge_axis_tickmode=<VALUE>, selector=dict(type='indicator'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(gauge_axis_tickprefix=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='candlestick'))" }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "outside", - "editType": "plot", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "outside", - "inside", - "" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(gauge_axis_ticks=<VALUE>, selector=dict(type='indicator'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(gauge_axis_ticksuffix=<VALUE>, selector=dict(type='indicator'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "plot", - "valType": "data_array", - "magic_underscores": "fig.update_traces(gauge_axis_ticktext=<VALUE>, selector=dict(type='indicator'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "plot", - "valType": "data_array", - "magic_underscores": "fig.update_traces(gauge_axis_tickvals=<VALUE>, selector=dict(type='indicator'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_axis_tickwidth=<VALUE>, selector=dict(type='indicator'))" - }, - "visible": { - "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false", - "dflt": true, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(gauge_axis_visible=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(gauge_axis=dict(...), selector=dict(type='indicator'))" - }, - "bar": { - "color": { - "description": "Sets the background color of the arc.", - "dflt": "green", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_bar_color=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='candlestick'))" }, - "description": "Set the appearance of the gauge's value", - "editType": "calc", - "line": { - "color": { - "description": "Sets the color of the line enclosing each sector.", - "dflt": "#444", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_bar_line_color=<VALUE>, selector=dict(type='indicator'))" - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the width (in px) of the line enclosing each sector.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_bar_line_width=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(gauge_bar_line=dict(...), selector=dict(type='indicator'))" + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='candlestick'))" }, - "role": "object", - "thickness": { - "description": "Sets the thickness of the bar as a fraction of the total thickness of the gauge.", - "dflt": 1, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_bar_thickness=<VALUE>, selector=dict(type='indicator'))" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='candlestick'))" }, - "magic_underscores": "fig.update_traces(gauge_bar=dict(...), selector=dict(type='indicator'))" - }, - "bgcolor": { - "description": "Sets the gauge background color.", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_bgcolor=<VALUE>, selector=dict(type='indicator'))" - }, - "bordercolor": { - "description": "Sets the color of the border enclosing the gauge.", - "dflt": "#444", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_bordercolor=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='candlestick'))" }, - "borderwidth": { - "description": "Sets the width (in px) of the border enclosing the gauge.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_borderwidth=<VALUE>, selector=dict(type='indicator'))" + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='candlestick'))" }, - "description": "The gauge of the Indicator plot.", + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='candlestick'))" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='candlestick'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='candlestick'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='candlestick'))" + }, + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer", + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='candlestick'))" + }, + "x": { + "description": "Sets the x coordinates. If absent, linear coordinate will be generated.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='candlestick'))" + }, + "close": { + "description": "Sets the close values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(close=<VALUE>, selector=dict(type='candlestick'))" + }, + "open": { + "description": "Sets the open values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(open=<VALUE>, selector=dict(type='candlestick'))" + }, + "high": { + "description": "Sets the high values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(high=<VALUE>, selector=dict(type='candlestick'))" + }, + "low": { + "description": "Sets the low values.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(low=<VALUE>, selector=dict(type='candlestick'))" + }, + "text": { + "arrayOk": true, + "description": "Sets hover text elements associated with each sample point. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to this trace's sample points.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='candlestick'))" + }, + "hovertext": { + "arrayOk": true, + "description": "Same as `text`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='candlestick'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "text", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='candlestick'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `open`, `high`, `low` and `close`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='candlestick'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='candlestick'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='candlestick'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='candlestick'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='candlestick'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='candlestick'))" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='candlestick'))" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='candlestick'))" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='candlestick'))" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='candlestick'))" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='candlestick'))" + }, + "line": { + "editType": "style", "role": "object", - "shape": { - "description": "Set the shape of the gauge", - "dflt": "angular", - "editType": "plot", - "valType": "enumerated", - "values": [ - "angular", - "bullet" - ], - "magic_underscores": "fig.update_traces(gauge_shape=<VALUE>, selector=dict(type='indicator'))" + "width": { + "description": "Sets the width (in px) of line bounding the box(es). Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`.", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='candlestick'))" }, - "steps": { - "items": { - "step": { - "color": { - "description": "Sets the background color of the arc.", - "editType": "plot", - "valType": "color" - }, - "editType": "calc", - "line": { - "color": { - "description": "Sets the color of the line enclosing each sector.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the width (in px) of the line enclosing each sector.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - } - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "range": { - "description": "Sets the range of this axis.", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "number" - }, - { - "editType": "plot", - "valType": "number" - } - ], - "valType": "info_array" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "thickness": { - "description": "Sets the thickness of the bar as a fraction of the total thickness of the gauge.", - "dflt": 1, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - } - } + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='candlestick'))" + }, + "whiskerwidth": { + "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).", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(whiskerwidth=<VALUE>, selector=dict(type='candlestick'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='candlestick'))" + }, + "increasing": { + "editType": "style", + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(increasing_fillcolor=<VALUE>, selector=dict(type='candlestick'))" + }, + "line": { + "color": { + "description": "Sets the color of line bounding the box(es).", + "dflt": "#3D9970", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(increasing_line_color=<VALUE>, selector=dict(type='candlestick'))" }, + "editType": "style", "role": "object", - "magic_underscores": "fig.update_traces(gauge_steps=list(...), selector=dict(type='indicator'))" + "width": { + "description": "Sets the width (in px) of line bounding the box(es).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(increasing_line_width=<VALUE>, selector=dict(type='candlestick'))" + }, + "magic_underscores": "fig.update_traces(increasing_line=dict(...), selector=dict(type='candlestick'))" }, - "threshold": { - "editType": "plot", - "line": { - "color": { - "description": "Sets the color of the threshold line.", - "dflt": "#444", - "editType": "plot", - "valType": "color", - "magic_underscores": "fig.update_traces(gauge_threshold_line_color=<VALUE>, selector=dict(type='indicator'))" - }, - "editType": "plot", - "role": "object", - "width": { - "description": "Sets the width (in px) of the threshold line.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(gauge_threshold_line_width=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(gauge_threshold_line=dict(...), selector=dict(type='indicator'))" + "role": "object", + "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='candlestick'))" + }, + "decreasing": { + "editType": "style", + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(decreasing_fillcolor=<VALUE>, selector=dict(type='candlestick'))" + }, + "line": { + "color": { + "description": "Sets the color of line bounding the box(es).", + "dflt": "#FF4136", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(decreasing_line_color=<VALUE>, selector=dict(type='candlestick'))" }, + "editType": "style", "role": "object", - "thickness": { - "description": "Sets the thickness of the threshold line as a fraction of the thickness of the gauge.", - "dflt": 0.85, - "editType": "plot", - "max": 1, + "width": { + "description": "Sets the width (in px) of line bounding the box(es).", + "dflt": 2, + "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(gauge_threshold_thickness=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(decreasing_line_width=<VALUE>, selector=dict(type='candlestick'))" }, - "value": { - "description": "Sets a treshold value drawn as a line.", - "dflt": false, - "editType": "calc", + "magic_underscores": "fig.update_traces(decreasing_line=dict(...), selector=dict(type='candlestick'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='candlestick'))" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ], + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='candlestick'))" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='candlestick'))" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='candlestick'))" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='candlestick'))" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='candlestick'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='candlestick'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='candlestick'))" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(gauge_threshold_value=<VALUE>, selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='candlestick'))" }, - "magic_underscores": "fig.update_traces(gauge_threshold=dict(...), selector=dict(type='indicator'))" + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='candlestick'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='candlestick'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='candlestick'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='candlestick'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='candlestick'))" }, - "magic_underscores": "fig.update_traces(gauge=dict(...), selector=dict(type='indicator'))" + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='candlestick'))" + }, + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='candlestick'))" + }, + "split": { + "description": "Show hover information (open, close, high, low) in separate labels, rather than a single unified label. Default: *false*. When set to *true*, `hovertemplate` is ignored.", + "dflt": false, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_split=<VALUE>, selector=dict(type='candlestick'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='candlestick'))" + }, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='candlestick'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='indicator'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='indicator'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='indicator'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='candlestick'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='indicator'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='candlestick'))" }, "categories": [ + "cartesian", "svg", - "noOpacity", - "noHover" + "showLegend", + "candlestick", + "boxLayout" ], + "layoutAttributes": { + "boxgap": { + "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates. Has no effect on traces that have *width* set.", + "dflt": 0.3, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "boxgroupgap": { + "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate. Has no effect on traces that have *width* set.", + "dflt": 0.3, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "boxmode": { + "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.", + "dflt": "overlay", + "editType": "calc", + "valType": "enumerated", + "values": [ + "group", + "overlay" + ] + } + }, "meta": { - "description": "An indicator is used to visualize a single `value` along with some contextual information such as `steps` or a `threshold`, using a combination of three visual elements: a number, a delta, and/or a gauge. Deltas are taken with respect to a `reference`. Gauges can be either angular or bullet (aka linear) gauges." + "description": "The candlestick is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The boxes represent the spread between the `open` and `close` values and the lines represent the spread between the `low` and `high` values Sample points where the close value is higher (lower) than the open value are called increasing (decreasing). By default, increasing candles are drawn in green whereas decreasing are drawn in red." }, - "type": "indicator" + "type": "candlestick" }, - "scatter3d": { + "waterfall": { "animatable": false, "attributes": { - "type": "scatter3d", + "type": "waterfall", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='waterfall'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='waterfall'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -51477,35 +42729,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='waterfall'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": true, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='waterfall'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='waterfall'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='waterfall'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='waterfall'))" }, "legendgrouptitle": { "editType": "style", @@ -51513,7 +42765,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='waterfall'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -51523,7 +42775,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='waterfall'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -51538,7 +42790,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='waterfall'))" }, "role": "object", "shadow": { @@ -51546,13 +42798,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='waterfall'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='waterfall'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -51563,7 +42815,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='waterfall'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -51576,7 +42828,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='waterfall'))" }, "variant": { "description": "Sets the variant of the font.", @@ -51591,7 +42843,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='waterfall'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -51604,9 +42856,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='waterfall'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='waterfall'))" }, "role": "object", "text": { @@ -51614,1265 +42866,1579 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='waterfall'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='waterfall'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='waterfall'))" }, "opacity": { "description": "Sets the opacity of the trace.", "dflt": 1, - "editType": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scatter3d'))" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "dflt": "lines+markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='waterfall'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='waterfall'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer", + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='waterfall'))" }, "x": { "description": "Sets the x coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='waterfall'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" + "x0": { + "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='waterfall'))" + }, + "dx": { + "description": "Sets the x coordinate step. See `x0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='waterfall'))" }, "y": { "description": "Sets the y coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='waterfall'))" }, - "z": { - "description": "Sets the z coordinates.", + "y0": { + "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "dflt": 0, "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "any", + "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='waterfall'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" + "dy": { + "description": "Sets the y coordinate step. See `y0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='waterfall'))" }, - "surfacecolor": { - "description": "Sets the surface fill color.", + "base": { + "arrayOk": false, + "description": "Sets where the bar base is drawn (in position axis units).", + "dflt": null, "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(surfacecolor=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "number", + "magic_underscores": "fig.update_traces(base=<VALUE>, selector=dict(type='waterfall'))" + }, + "width": { + "arrayOk": true, + "description": "Sets the bar width (in position axis units).", + "dflt": null, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='waterfall'))" + }, + "measure": { + "description": "An array containing types of values. By default the values are considered as 'relative'. However; it is possible to use 'total' to compute the sums. Also 'absolute' could be applied to reset the computed total or to declare an initial value where needed.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(measure=<VALUE>, selector=dict(type='waterfall'))" + }, + "offset": { + "arrayOk": true, + "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.", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='waterfall'))" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (x,y,z) triplet. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y,z) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatter3d'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='waterfall'))" }, "textposition": { "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "top center", + "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. If *none*, no text appears.", + "dflt": "auto", "editType": "calc", "valType": "enumerated", "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" + "inside", + "outside", + "auto", + "none" ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatter3d'))" - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='waterfall'))" }, "texttemplate": { "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. ", + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `initial`, `delta`, `final` and `label`.", "dflt": "", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='waterfall'))" }, "texttemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", - "editType": "calc", + "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatter3d'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='waterfall'))" }, "hovertext": { "arrayOk": true, - "description": "Sets text elements associated with each (x,y,z) triplet. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y,z) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", - "editType": "calc", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatter3d'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='waterfall'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", - "editType": "calc", + "editType": "none", "extras": [ "all", "none", "skip" ], "flags": [ + "name", "x", "y", - "z", "text", - "name" + "initial", + "delta", + "final" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatter3d'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='waterfall'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `initial`, `delta` and `final`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='waterfall'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatter3d'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", "editType": "none", - "valType": "string" + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='waterfall'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='waterfall'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='waterfall'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatter3d'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='waterfall'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='waterfall'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='waterfall'))" }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='waterfall'))" }, - "marker": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, + "orientation": { + "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal).", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "v", + "h" + ], + "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='waterfall'))" + }, + "alignmentgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='waterfall'))" + }, + "offsetgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='waterfall'))" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='waterfall'))" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='waterfall'))" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='waterfall'))" + }, + "yperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='waterfall'))" + }, + "yperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='waterfall'))" + }, + "yperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='waterfall'))" + }, + "textangle": { + "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.", + "dflt": "auto", + "editType": "plot", + "valType": "angle", + "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='waterfall'))" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='waterfall'))" + }, + "description": "Sets the font used for `text`.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='waterfall'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scatter3d'))" + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='waterfall'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, + "size": { + "arrayOk": true, "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='waterfall'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='waterfall'))" }, - "color": { + "textcase": { "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='waterfall'))" }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='waterfall'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scatter3d'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scatter3d'))" - }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scatter3d'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scatter3d'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scatter3d'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scatter3d'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scatter3d'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scatter3d'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scatter3d'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='waterfall'))" + }, + "textinfo": { + "arrayOk": false, + "description": "Determines what trace information appears on the graph. In the case of having multiple waterfalls, totals are computed separately (per trace). Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "label", + "text", + "initial", + "delta", + "final" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='waterfall'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='waterfall'))" + }, + "cliponaxis": { + "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*.", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='waterfall'))" + }, + "connector": { + "editType": "plot", + "line": { + "color": { + "description": "Sets the line color.", "dflt": "#444", - "editType": "calc", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scatter3d'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scatter3d'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scatter3d'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_line_color=<VALUE>, selector=dict(type='waterfall'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", "values": [ - "all", - "first", - "last", - "none" + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_line_dash=<VALUE>, selector=dict(type='waterfall'))" }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", + "editType": "plot", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "plot", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_line_width=<VALUE>, selector=dict(type='waterfall'))" }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_line=dict(...), selector=dict(type='waterfall'))" + }, + "mode": { + "description": "Sets the shape of connector lines.", + "dflt": "between", + "editType": "plot", + "valType": "enumerated", + "values": [ + "spanning", + "between" + ], + "magic_underscores": "fig.update_traces(connector_mode=<VALUE>, selector=dict(type='waterfall'))" + }, + "role": "object", + "visible": { + "description": "Determines if connector lines are drawn. ", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(connector_visible=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(connector=dict(...), selector=dict(type='waterfall'))" + }, + "constraintext": { + "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", + "dflt": "both", + "editType": "calc", + "valType": "enumerated", + "values": [ + "inside", + "outside", + "both", + "none" + ], + "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='waterfall'))" + }, + "increasing": { + "editType": "style", + "marker": { + "color": { + "arrayOk": false, + "description": "Sets the marker color of all increasing values.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(increasing_marker_color=<VALUE>, selector=dict(type='waterfall'))" }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "editType": "style", + "line": { + "color": { + "arrayOk": false, + "description": "Sets the line color of all increasing values.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(increasing_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scatter3d'))" + "editType": "style", + "role": "object", + "width": { + "arrayOk": false, + "description": "Sets the line width of all increasing values.", + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(increasing_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(increasing_marker_line=dict(...), selector=dict(type='waterfall'))" }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(increasing_marker=dict(...), selector=dict(type='waterfall'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(increasing=dict(...), selector=dict(type='waterfall'))" + }, + "decreasing": { + "editType": "style", + "marker": { + "color": { + "arrayOk": false, + "description": "Sets the marker color of all decreasing values.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(decreasing_marker_color=<VALUE>, selector=dict(type='waterfall'))" }, - "tickfont": { + "editType": "style", + "line": { "color": { - "editType": "calc", + "arrayOk": false, + "description": "Sets the line color of all decreasing values.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "description": "Sets the color bar's tick label font", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scatter3d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(decreasing_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" }, + "editType": "style", "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scatter3d'))" - }, - "size": { - "editType": "calc", - "min": 1, + "width": { + "arrayOk": false, + "description": "Sets the line width of all decreasing values.", + "dflt": 0, + "editType": "style", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scatter3d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scatter3d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scatter3d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scatter3d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(decreasing_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(decreasing_marker_line=dict(...), selector=dict(type='waterfall'))" }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scatter3d'))" + "role": "object", + "magic_underscores": "fig.update_traces(decreasing_marker=dict(...), selector=dict(type='waterfall'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(decreasing=dict(...), selector=dict(type='waterfall'))" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ], + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='waterfall'))" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='waterfall'))" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='waterfall'))" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='waterfall'))" }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scatter3d'))" + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='waterfall'))" }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" + "flags": [ + "under", + "over", + "through" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='waterfall'))" }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scatter3d'))" + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='waterfall'))" }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='waterfall'))" }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", "valType": "enumerated", "values": [ - "auto", - "linear", - "array" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='waterfall'))" }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", "valType": "enumerated", "values": [ - "outside", - "inside", - "" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='waterfall'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='waterfall'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "none", - "valType": "string" + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='waterfall'))" }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='waterfall'))" + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='waterfall'))" + }, + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='waterfall'))" + }, + "insidetextanchor": { + "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode.", + "dflt": "end", + "editType": "plot", + "valType": "enumerated", + "values": [ + "end", + "middle", + "start" + ], + "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='waterfall'))" + }, + "insidetextfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='waterfall'))" + }, + "description": "Sets the font used for `text` lying inside the bar.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='waterfall'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='waterfall'))" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='waterfall'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='waterfall'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='waterfall'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='waterfall'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='waterfall'))" + }, + "outsidetextfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='waterfall'))" + }, + "description": "Sets the font used for `text` lying outside the bar.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='waterfall'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='waterfall'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='waterfall'))" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='waterfall'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='waterfall'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='waterfall'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='waterfall'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='waterfall'))" + }, + "totals": { + "editType": "style", + "marker": { + "color": { + "arrayOk": false, + "description": "Sets the marker color of all intermediate sums and total values.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(totals_marker_color=<VALUE>, selector=dict(type='waterfall'))" }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scatter3d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scatter3d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scatter3d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scatter3d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scatter3d'))" + "editType": "style", + "line": { + "color": { + "arrayOk": false, + "description": "Sets the line color of all intermediate sums and total values.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(totals_marker_line_color=<VALUE>, selector=dict(type='waterfall'))" }, + "editType": "style", "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scatter3d'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scatter3d'))" + "width": { + "arrayOk": false, + "description": "Sets the line width of all intermediate sums and total values.", + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(totals_marker_line_width=<VALUE>, selector=dict(type='waterfall'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(totals_marker_line=dict(...), selector=dict(type='waterfall'))" }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scatter3d'))" + "role": "object", + "magic_underscores": "fig.update_traces(totals_marker=dict(...), selector=dict(type='waterfall'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(totals=dict(...), selector=dict(type='waterfall'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='waterfall'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='waterfall'))" + }, + "categories": [ + "bar-like", + "cartesian", + "svg", + "oriented", + "showLegend", + "zoomScale" + ], + "layoutAttributes": { + "waterfallgap": { + "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "waterfallgroupgap": { + "description": "Sets the gap (in plot fraction) between bars of the same location coordinate.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "waterfallmode": { + "description": "Determines how bars at the same location coordinate are displayed on the graph. 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 reduce *opacity* to see multiple bars.", + "dflt": "group", + "editType": "calc", + "valType": "enumerated", + "values": [ + "group", + "overlay" + ] + } + }, + "meta": { + "description": "Draws waterfall trace which is useful graph to displays the contribution of various elements (either positive or negative) in a bar chart. The data visualized by the span of the bars is set in `y` if `orientation` is set to *v* (the default) and the labels are set in `x`. By setting `orientation` to *h*, the roles are interchanged." + }, + "type": "waterfall" + }, + "funnel": { + "animatable": false, + "attributes": { + "type": "funnel", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='funnel'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='funnel'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='funnel'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='funnel'))" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='funnel'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='funnel'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='funnel'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='funnel'))" }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='funnel'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scatter3d'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='funnel'))" }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='funnel'))" + }, + "size": { + "editType": "style", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='funnel'))" }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "container", - "paper" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='funnel'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "top", - "middle", - "bottom" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='funnel'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "container", - "paper" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatter3d'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='scatter3d'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='scatter3d'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='scatter3d'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='scatter3d'))" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='funnel'))" }, - "role": "object", - "width": { - "arrayOk": false, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatter3d'))" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatter3d'))" - }, - "opacity": { - "arrayOk": false, - "description": "Sets the marker opacity. Note that the marker opacity for scatter3d traces must be a scalar value for performance reasons. To set a blending opacity value (i.e. which is not transparent), set *marker.color* to an rgba color and use its alpha channel.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatter3d'))" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='funnel'))" }, "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 8, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ], - "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type.", - "dflt": "circle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "circle", - "circle-open", - "cross", - "diamond", - "diamond-open", - "square", - "square-open", - "x" - ], - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatter3d'))" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='funnel'))" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='funnel'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='funnel'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='funnel'))" + }, + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer", + "magic_underscores": "fig.update_traces(zorder=<VALUE>, selector=dict(type='funnel'))" + }, + "x": { + "description": "Sets the x coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='funnel'))" + }, + "x0": { + "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(x0=<VALUE>, selector=dict(type='funnel'))" + }, + "dx": { + "description": "Sets the x coordinate step. See `x0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(dx=<VALUE>, selector=dict(type='funnel'))" + }, + "y": { + "description": "Sets the y coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='funnel'))" + }, + "y0": { + "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any", + "magic_underscores": "fig.update_traces(y0=<VALUE>, selector=dict(type='funnel'))" + }, + "dy": { + "description": "Sets the y coordinate step. See `y0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(dy=<VALUE>, selector=dict(type='funnel'))" + }, + "width": { + "arrayOk": false, + "description": "Sets the bar width (in position axis units).", + "dflt": null, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='funnel'))" + }, + "offset": { + "arrayOk": false, + "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.", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='funnel'))" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='funnel'))" + }, + "textposition": { + "arrayOk": true, + "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. If *none*, no text appears.", + "dflt": "auto", + "editType": "calc", + "valType": "enumerated", + "values": [ + "inside", + "outside", + "auto", + "none" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='funnel'))" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `percentInitial`, `percentPrevious`, `percentTotal`, `label` and `value`.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='funnel'))" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='funnel'))" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='funnel'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "name", + "x", + "y", + "text", + "percent initial", + "percent previous", + "percent total" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='funnel'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `percentInitial`, `percentPrevious` and `percentTotal`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='funnel'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='funnel'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='funnel'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='funnel'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='funnel'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='funnel'))" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(xaxis=<VALUE>, selector=dict(type='funnel'))" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(yaxis=<VALUE>, selector=dict(type='funnel'))" }, - "line": { + "orientation": { + "description": "Sets the orientation of the funnels. With *v* (*h*), the value of the each bar spans along the vertical (horizontal). By default funnels are tend to be oriented horizontally; unless only *y* array is presented or orientation is set to *v*. Also regarding graphs including only 'horizontal' funnels, *autorange* on the *y-axis* are set to *reversed*.", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "v", + "h" + ], + "magic_underscores": "fig.update_traces(orientation=<VALUE>, selector=dict(type='funnel'))" + }, + "alignmentgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(alignmentgroup=<VALUE>, selector=dict(type='funnel'))" + }, + "offsetgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(offsetgroup=<VALUE>, selector=dict(type='funnel'))" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod=<VALUE>, selector=dict(type='funnel'))" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(xperiodalignment=<VALUE>, selector=dict(type='funnel'))" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(xperiod0=<VALUE>, selector=dict(type='funnel'))" + }, + "yperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod=<VALUE>, selector=dict(type='funnel'))" + }, + "yperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ], + "magic_underscores": "fig.update_traces(yperiodalignment=<VALUE>, selector=dict(type='funnel'))" + }, + "yperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(yperiod0=<VALUE>, selector=dict(type='funnel'))" + }, + "marker": { "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `line.colorscale`. Has an effect only if in `line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(line_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='funnel'))" }, "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `line.color`) or the bounds set in `line.cmin` and `line.cmax` Has an effect only if in `line.color` is set to a numerical array. Defaults to `false` when `line.cmin` and `line.cmax` are set by the user.", + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(line_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(line_cauto=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='funnel'))" }, "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmin` must be set as well.", + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(line_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(line_cmax=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='funnel'))" }, "cmid": { - "description": "Sets the mid-point of the color domain by scaling `line.cmin` and/or `line.cmax` to be equidistant to this point. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color`. Has no effect when `line.cauto` is `false`.", + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(line_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(line_cmid=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='funnel'))" }, "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmax` must be set as well.", + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(line_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(line_cmin=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='funnel'))" }, "color": { "arrayOk": true, - "description": "Sets the line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `line.cmin` and `line.cmax` if set.", - "editType": "calc", + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='funnel'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -52880,46 +44446,46 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(line_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='funnel'))" }, "colorbar": { "bgcolor": { "description": "Sets the color of padded area.", "dflt": "rgba(0,0,0,0)", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='funnel'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='funnel'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_borderwidth=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='funnel'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(line_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(line_colorbar_dtick=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='funnel'))" }, - "editType": "calc", + "editType": "colorbars", "exponentformat": { "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", "dflt": "B", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "none", @@ -52930,88 +44496,88 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(line_colorbar_exponentformat=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='funnel'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "any", - "magic_underscores": "fig.update_traces(line_colorbar_labelalias=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='funnel'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_len=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='funnel'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", "dflt": "fraction", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(line_colorbar_lenmode=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='funnel'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", "dflt": 3, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_minexponent=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='funnel'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(line_colorbar_nticks=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='funnel'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", "dflt": "v", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "h", "v" ], - "magic_underscores": "fig.update_traces(line_colorbar_orientation=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='funnel'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_outlinecolor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='funnel'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_outlinewidth=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", "separatethousands": { "description": "If \"true\", even 4-digit integers are separated", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(line_colorbar_separatethousands=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='funnel'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -53019,19 +44585,19 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(line_colorbar_showexponent=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='funnel'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(line_colorbar_showticklabels=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='funnel'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -53039,12 +44605,12 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(line_colorbar_showtickprefix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='funnel'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -53052,71 +44618,71 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(line_colorbar_showticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='funnel'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", "dflt": 30, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_thickness=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='funnel'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", "dflt": "pixels", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(line_colorbar_thicknessmode=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='funnel'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(line_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(line_colorbar_tick0=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='funnel'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", - "editType": "calc", + "editType": "colorbars", "valType": "angle", - "magic_underscores": "fig.update_traces(line_colorbar_tickangle=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='funnel'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_tickcolor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='funnel'))" }, "tickfont": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_color=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='funnel'))" }, "description": "Sets the color bar's tick label font", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_family=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='funnel'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -53126,37 +44692,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='funnel'))" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_size=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='funnel'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_style=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='funnel'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -53164,12 +44730,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='funnel'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -53179,12 +44745,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='funnel'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -53192,79 +44758,79 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(line_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(line_colorbar_tickfont=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='funnel'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_tickformat=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='funnel'))" }, "tickformatstops": { "items": { "tickformatstop": { "dtickrange": { "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", + "editType": "colorbars", "items": [ { - "editType": "calc", + "editType": "colorbars", "valType": "any" }, { - "editType": "calc", + "editType": "colorbars", "valType": "any" } ], "valType": "info_array" }, - "editType": "calc", + "editType": "colorbars", "enabled": { "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean" }, "name": { "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "role": "object", "templateitemname": { "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "value": { "description": "string - dtickformat for described zoom level, the same as *tickformat*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" } } }, "role": "object", - "magic_underscores": "fig.update_traces(line_colorbar_tickformatstops=list(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='funnel'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "allow", "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(line_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='funnel'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", "dflt": "outside", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", @@ -53278,29 +44844,29 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(line_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='funnel'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(line_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='funnel'))" }, "ticklen": { "description": "Sets the tick length (in px).", "dflt": 5, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_ticklen=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='funnel'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(line_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='funnel'))" }, "valType": "enumerated", "values": [ @@ -53308,86 +44874,76 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(line_colorbar_tickmode=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='funnel'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_tickprefix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='funnel'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", "inside", "" ], - "magic_underscores": "fig.update_traces(line_colorbar_ticks=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='funnel'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_ticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='funnel'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", + "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(line_colorbar_ticktext=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='funnel'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", + "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(line_colorbar_tickvals=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='funnel'))" }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_tickwidth=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='funnel'))" }, "title": { - "editType": "calc", + "editType": "colorbars", "font": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_color=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='funnel'))" }, "description": "Sets this color bar's title font.", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_family=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='funnel'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -53397,37 +44953,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='funnel'))" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_size=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='funnel'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(line_colorbar_title_font_style=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='funnel'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -53435,12 +44991,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(line_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='funnel'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -53450,12 +45006,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(line_colorbar_title_font_variant=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='funnel'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -53463,174 +45019,257 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(line_colorbar_title_font_weight=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(line_colorbar_title_font=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='funnel'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ "right", "top", "bottom" ], - "magic_underscores": "fig.update_traces(line_colorbar_title_side=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='funnel'))" }, "text": { "description": "Sets the title of the color bar.", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(line_colorbar_title_text=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(line_colorbar_title=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='funnel'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", + "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_x=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='funnel'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "left", "center", "right" ], - "magic_underscores": "fig.update_traces(line_colorbar_xanchor=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='funnel'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", "dflt": 10, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_xpad=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='funnel'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", "dflt": "paper", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "container", "paper" ], - "magic_underscores": "fig.update_traces(line_colorbar_xref=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='funnel'))" + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='funnel'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='funnel'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='funnel'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='funnel'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='funnel'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='funnel'))" + }, + "editType": "calc", + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='funnel'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='funnel'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='funnel'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='funnel'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='funnel'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='funnel'))" }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_y=<VALUE>, selector=dict(type='scatter3d'))" + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='funnel'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(line_colorbar_yanchor=<VALUE>, selector=dict(type='scatter3d'))" + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='funnel'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='funnel'))" }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='funnel'))" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "dflt": 0, + "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_colorbar_ypad=<VALUE>, selector=dict(type='scatter3d'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(line_colorbar_yref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(line_colorbar=dict(...), selector=dict(type='scatter3d'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='funnel'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(line_colorscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='funnel'))" }, - "dash": { - "description": "Sets the dash style of the lines.", - "dflt": "solid", - "editType": "calc", - "valType": "enumerated", - "values": [ - "dash", - "dashdot", - "dot", - "longdash", - "longdashdot", - "solid" - ], - "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='scatter3d'))" + "opacity": { + "arrayOk": true, + "description": "Sets the opacity of the bars.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='funnel'))" }, - "editType": "calc", "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `line.color` is set to a numerical array. If true, `line.cmin` will correspond to the last color in the array and `line.cmax` will correspond to the first color.", + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, - "editType": "calc", + "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(line_reversescale=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `line.color` is set to a numerical array.", + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(line_showscale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='funnel'))" + }, + "textangle": { + "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.", + "dflt": 0, + "editType": "plot", + "valType": "angle", + "magic_underscores": "fig.update_traces(textangle=<VALUE>, selector=dict(type='funnel'))" }, "textfont": { "color": { "arrayOk": true, - "editType": "calc", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='funnel'))" }, - "description": "Sets the text font.", + "description": "Sets the font used for `text`.", "editType": "calc", "family": { "arrayOk": true, @@ -53639,25 +45278,39 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='funnel'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='funnel'))" + }, "size": { "arrayOk": true, "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='funnel'))" }, "style": { "arrayOk": true, @@ -53669,12 +45322,21 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='funnel'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='funnel'))" }, "variant": { "arrayOk": true, @@ -53684,14 +45346,13 @@ "valType": "enumerated", "values": [ "normal", - "small-caps" + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatter3d'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='funnel'))" }, "weight": { "arrayOk": true, @@ -53705,344 +45366,106 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatter3d'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='funnel'))" }, - "error_x": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_x_array=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(error_x_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "copy_zstyle": { - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_copy_zstyle=<VALUE>, selector=dict(type='scatter3d'))" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_symmetric=<VALUE>, selector=dict(type='scatter3d'))" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_thickness=<VALUE>, selector=dict(type='scatter3d'))" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_x_traceref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_x_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ], - "magic_underscores": "fig.update_traces(error_x_type=<VALUE>, selector=dict(type='scatter3d'))" - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_value=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_valueminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_x_visible=<VALUE>, selector=dict(type='scatter3d'))" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_x_width=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(error_x=dict(...), selector=dict(type='scatter3d'))" + "textinfo": { + "arrayOk": false, + "description": "Determines what trace information appears on the graph. In the case of having multiple funnels, percentages & totals are computed separately (per trace). Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "label", + "text", + "percent initial", + "percent previous", + "percent total", + "value" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='funnel'))" }, - "error_y": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_y_array=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(error_y_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "copy_zstyle": { - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_y_copy_zstyle=<VALUE>, selector=dict(type='scatter3d'))" - }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_y_symmetric=<VALUE>, selector=dict(type='scatter3d'))" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_thickness=<VALUE>, selector=dict(type='scatter3d'))" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_y_traceref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_y_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ], - "magic_underscores": "fig.update_traces(error_y_type=<VALUE>, selector=dict(type='scatter3d'))" - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_value=<VALUE>, selector=dict(type='scatter3d'))" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_valueminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_y_visible=<VALUE>, selector=dict(type='scatter3d'))" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_y_width=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(error_y=dict(...), selector=dict(type='scatter3d'))" + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='funnel'))" }, - "error_z": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_z_array=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(error_z_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", + "cliponaxis": { + "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*.", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(cliponaxis=<VALUE>, selector=dict(type='funnel'))" + }, + "connector": { + "editType": "plot", + "fillcolor": { + "description": "Sets the fill color.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(error_z_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(error_z_symmetric=<VALUE>, selector=dict(type='scatter3d'))" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_z_thickness=<VALUE>, selector=dict(type='scatter3d'))" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_z_traceref=<VALUE>, selector=dict(type='scatter3d'))" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(error_z_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ], - "magic_underscores": "fig.update_traces(error_z_type=<VALUE>, selector=dict(type='scatter3d'))" - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_z_value=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_fillcolor=<VALUE>, selector=dict(type='funnel'))" }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_z_valueminus=<VALUE>, selector=dict(type='scatter3d'))" + "line": { + "color": { + "description": "Sets the line color.", + "dflt": "#444", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(connector_line_color=<VALUE>, selector=dict(type='funnel'))" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(connector_line_dash=<VALUE>, selector=dict(type='funnel'))" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(connector_line_width=<VALUE>, selector=dict(type='funnel'))" + }, + "magic_underscores": "fig.update_traces(connector_line=dict(...), selector=dict(type='funnel'))" }, + "role": "object", "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", + "description": "Determines if connector regions and lines are drawn.", + "dflt": true, + "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(error_z_visible=<VALUE>, selector=dict(type='scatter3d'))" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(error_z_width=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector_visible=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(error_z=dict(...), selector=dict(type='scatter3d'))" - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='scatter3d'))" + "magic_underscores": "fig.update_traces(connector=dict(...), selector=dict(type='funnel'))" }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, + "constraintext": { + "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself.", + "dflt": "both", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scatter3d'))" + "valType": "enumerated", + "values": [ + "inside", + "outside", + "both", + "none" + ], + "magic_underscores": "fig.update_traces(constraintext=<VALUE>, selector=dict(type='funnel'))" }, "hoverlabel": { "align": { @@ -54056,36 +45479,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatter3d'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='funnel'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='funnel'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='funnel'))" }, "editType": "none", "font": { @@ -54093,12 +45501,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatter3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='funnel'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -54109,12 +45512,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatter3d'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='funnel'))" }, "lineposition": { "arrayOk": true, @@ -54130,12 +45528,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", "shadow": { @@ -54144,24 +45537,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='funnel'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatter3d'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='funnel'))" }, "style": { "arrayOk": true, @@ -54173,12 +45556,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatter3d'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='funnel'))" }, "textcase": { "arrayOk": true, @@ -54192,435 +45570,13 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatter3d'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatter3d'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatter3d'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatter3d'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scatter3d'))" - }, - "projection": { - "editType": "calc", - "role": "object", - "x": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_x_opacity=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_x_scale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "show": { - "description": "Sets whether or not projections are shown along the x axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(projection_x_show=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(projection_x=dict(...), selector=dict(type='scatter3d'))" - }, - "y": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_y_opacity=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_y_scale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "show": { - "description": "Sets whether or not projections are shown along the y axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(projection_y_show=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(projection_y=dict(...), selector=dict(type='scatter3d'))" - }, - "z": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_z_opacity=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(projection_z_scale=<VALUE>, selector=dict(type='scatter3d'))" - }, - "show": { - "description": "Sets whether or not projections are shown along the z axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(projection_z_show=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(projection_z=dict(...), selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(projection=dict(...), selector=dict(type='scatter3d'))" - }, - "surfaceaxis": { - "description": "If *-1*, the scatter points are not fill with a surface If *0*, *1*, *2*, the scatter points are filled with a Delaunay surface about the x, y, z respectively.", - "dflt": -1, - "editType": "calc", - "valType": "enumerated", - "values": [ - -1, - 0, - 1, - 2 - ], - "magic_underscores": "fig.update_traces(surfaceaxis=<VALUE>, selector=dict(type='scatter3d'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='scatter3d'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='scatter3d'))" - }, - "zcalendar": { - "description": "Sets the calendar system to use with `z` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='scatter3d'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatter3d'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scatter3d'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scatter3d'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='scatter3d'))" - }, - "categories": [ - "gl3d", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point or lines in 3D dimension is set in `x`, `y`, `z`. Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` Projections are achieved via `projection`. Surface fills are achieved via `surfaceaxis`.", - "hrName": "scatter_3d" - }, - "type": "scatter3d" - }, - "surface": { - "animatable": false, - "attributes": { - "type": "surface", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='surface'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='surface'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='surface'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='surface'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='surface'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='surface'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='surface'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='surface'))" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='surface'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='surface'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='surface'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='surface'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='surface'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='funnel'))" }, "variant": { + "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "style", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -54630,12 +45586,13 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='funnel'))" }, "weight": { + "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "style", + "editType": "none", "extras": [ "normal", "bold" @@ -54643,449 +45600,347 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='funnel'))" + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='funnel'))" }, "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='surface'))" + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='funnel'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='surface'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='surface'))" - }, - "opacity": { - "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='surface'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='surface'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the x coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='surface'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the y coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='surface'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the z coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='surface'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "surfacecolor": { - "description": "Sets the surface color values, used for setting a color scale independent of `z`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(surfacecolor=<VALUE>, selector=dict(type='surface'))" - }, - "surfacecolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `surfacecolor`.", - "editType": "none", - "valType": "string" - }, - "text": { - "arrayOk": true, - "description": "Sets the text elements associated with each z value. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='surface'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='surface'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='surface'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='surface'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='surface'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='surface'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='funnel'))" }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "insidetextanchor": { + "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode.", + "dflt": "middle", "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='surface'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='surface'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='surface'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='surface'))" + "valType": "enumerated", + "values": [ + "end", + "middle", + "start" + ], + "magic_underscores": "fig.update_traces(insidetextanchor=<VALUE>, selector=dict(type='funnel'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='surface'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", + "insidetextfont": { + "color": { + "arrayOk": true, + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='surface'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='funnel'))" }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "description": "Sets the font used for `text` lying inside the bar.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='surface'))" + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='funnel'))" }, - "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='surface'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='funnel'))" }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='surface'))" + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='funnel'))" }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, + "size": { + "arrayOk": true, "editType": "calc", - "min": 0, + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='funnel'))" }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "fraction", - "pixels" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='surface'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='funnel'))" }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='surface'))" + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='funnel'))" }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "h", - "v" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='funnel'))" }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='surface'))" + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='funnel'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='funnel'))" + }, + "outsidetextfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='funnel'))" }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, + "description": "Sets the font used for `text` lying outside the bar.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='surface'))" + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='funnel'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", + "extras": [ "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='surface'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='funnel'))" }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='surface'))" + "valType": "string", + "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='funnel'))" }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", + "size": { + "arrayOk": true, "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='surface'))" + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='funnel'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='surface'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='funnel'))" }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "fraction", - "pixels" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='surface'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='funnel'))" }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='surface'))" + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='funnel'))" }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='surface'))" + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='funnel'))" }, - "tickfont": { + "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='funnel'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='funnel'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='funnel'))" + }, + "categories": [ + "bar-like", + "cartesian", + "svg", + "oriented", + "showLegend", + "zoomScale" + ], + "layoutAttributes": { + "funnelgap": { + "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "funnelgroupgap": { + "description": "Sets the gap (in plot fraction) between bars of the same location coordinate.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "funnelmode": { + "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 *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 reduce *opacity* to see multiple bars.", + "dflt": "stack", + "editType": "calc", + "valType": "enumerated", + "values": [ + "stack", + "group", + "overlay" + ] + } + }, + "meta": { + "description": "Visualize stages in a process using length-encoded bars. This trace can be used to show data in either a part-to-whole representation wherein each item appears in a single stage, or in a \"drop-off\" representation wherein each item appears in each stage it traversed. See also the \"funnelarea\" trace type for a different approach to visualizing funnel data." + }, + "type": "funnel" + }, + "funnelarea": { + "animatable": false, + "attributes": { + "type": "funnelarea", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='funnelarea'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='funnelarea'))" + }, + "title": { + "editType": "plot", + "font": { "color": { - "editType": "calc", + "arrayOk": true, + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_color=<VALUE>, selector=dict(type='funnelarea'))" }, - "description": "Sets the color bar's tick label font", - "editType": "calc", + "description": "Sets the font used for `title`.", + "editType": "plot", "family": { + "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_family=<VALUE>, selector=dict(type='funnelarea'))" }, "lineposition": { + "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "plot", "extras": [ "none" ], @@ -55095,37 +45950,41 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" }, "role": "object", "shadow": { + "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" }, "size": { - "editType": "calc", + "arrayOk": true, + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_size=<VALUE>, selector=dict(type='funnelarea'))" }, "style": { + "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_style=<VALUE>, selector=dict(type='funnelarea'))" }, "textcase": { + "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -55133,12 +45992,13 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" }, "variant": { + "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -55148,12 +46008,13 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_variant=<VALUE>, selector=dict(type='funnelarea'))" }, "weight": { + "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "plot", "extras": [ "normal", "bold" @@ -55161,795 +46022,644 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='surface'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='surface'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='surface'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='surface'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='surface'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='surface'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='surface'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font_weight=<VALUE>, selector=dict(type='funnelarea'))" }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='surface'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_font=dict(...), selector=dict(type='funnelarea'))" }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", + "position": { + "description": "Specifies the location of the `title`.", + "dflt": "top center", + "editType": "plot", "valType": "enumerated", "values": [ - "outside", - "inside", - "" + "top left", + "top center", + "top right" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_position=<VALUE>, selector=dict(type='funnelarea'))" }, - "ticksuffix": { - "description": "Sets a tick label suffix.", + "role": "object", + "text": { + "description": "Sets the title of the chart. If it is empty, no title is displayed.", "dflt": "", - "editType": "calc", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='surface'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='surface'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='surface'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title_text=<VALUE>, selector=dict(type='funnelarea'))" }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='surface'))" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='surface'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='surface'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='surface'))" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='surface'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='surface'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='surface'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='surface'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(title=dict(...), selector=dict(type='funnelarea'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='funnelarea'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='funnelarea'))" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='funnelarea'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='funnelarea'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='funnelarea'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='funnelarea'))" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='funnelarea'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='funnelarea'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='funnelarea'))" }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", "valType": "enumerated", "values": [ - "right", - "top", - "bottom" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='surface'))" + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='surface'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='surface'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='surface'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='surface'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='surface'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='surface'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='surface'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='surface'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='surface'))" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='funnelarea'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='surface'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": false, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='surface'))" + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='funnelarea'))" }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='funnelarea'))" }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='surface'))" + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='funnelarea'))" }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='surface'))" + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='funnelarea'))" }, - "reversescale": { - "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", - "dflt": false, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='surface'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='funnelarea'))" }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", - "dflt": "", + "values": { + "description": "Sets the values of the sectors. If omitted, we count occurrences of each label.", "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='surface'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='funnelarea'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here z or surfacecolor) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", - "dflt": true, + "labels": { + "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.", "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='surface'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='funnelarea'))" }, - "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmin` must be set as well.", - "dflt": null, + "dlabel": { + "description": "Sets the label step. See `label0` for more info.", + "dflt": 1, "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(dlabel=<VALUE>, selector=dict(type='funnelarea'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as z or surfacecolor. Has no effect when `cauto` is `false`.", - "dflt": null, + "label0": { + "description": "Alternate to `labels`. Builds a numeric set of labels. Use with `dlabel` where `label0` is the starting label and `dlabel` the step.", + "dflt": 0, "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(label0=<VALUE>, selector=dict(type='funnelarea'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='surface'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='surface'))" + "text": { + "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "editType": "plot", + "valType": "data_array", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='funnelarea'))" }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data are filled in.", - "dflt": false, + "textposition": { + "arrayOk": true, + "description": "Specifies the location of the `textinfo`.", + "dflt": "inside", + "editType": "plot", + "valType": "enumerated", + "values": [ + "inside", + "none" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='funnelarea'))" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `text` and `percent`.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='funnelarea'))" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='funnelarea'))" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='funnelarea'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. Flags are rendered in a fixed order; use `hovertemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "label", + "text", + "value", + "percent", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='funnelarea'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `text` and `percent`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='funnelarea'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='funnelarea'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='funnelarea'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='surface'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='funnelarea'))" }, - "contours": { + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this funnelarea trace.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='funnelarea'))" + }, "editType": "calc", "role": "object", - "x": { - "color": { - "description": "Sets the color of the contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contours_x_color=<VALUE>, selector=dict(type='surface'))" - }, + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this funnelarea trace.", + "dflt": 0, "editType": "calc", - "end": { - "description": "Sets the end contour level value. Must be more than `contours.start`", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(contours_x_end=<VALUE>, selector=dict(type='surface'))" - }, - "highlight": { - "description": "Determines whether or not contour lines about the x dimension are highlighted on hover.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_highlight=<VALUE>, selector=dict(type='surface'))" - }, - "highlightcolor": { - "description": "Sets the color of the highlighted contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contours_x_highlightcolor=<VALUE>, selector=dict(type='surface'))" - }, - "highlightwidth": { - "description": "Sets the width of the highlighted contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_x_highlightwidth=<VALUE>, selector=dict(type='surface'))" - }, - "project": { - "editType": "calc", - "role": "object", - "x": { - "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_project_x=<VALUE>, selector=dict(type='surface'))" - }, - "y": { - "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_project_y=<VALUE>, selector=dict(type='surface'))" - }, - "z": { - "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_project_z=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(contours_x_project=dict(...), selector=dict(type='surface'))" - }, - "role": "object", - "show": { - "description": "Determines whether or not contour lines about the x dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_show=<VALUE>, selector=dict(type='surface'))" - }, - "size": { - "description": "Sets the step between each contour level. Must be positive.", - "dflt": null, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_x_size=<VALUE>, selector=dict(type='surface'))" - }, - "start": { - "description": "Sets the starting contour level value. Must be less than `contours.end`", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(contours_x_start=<VALUE>, selector=dict(type='surface'))" - }, - "usecolormap": { - "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_x_usecolormap=<VALUE>, selector=dict(type='surface'))" - }, - "width": { - "description": "Sets the width of the contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_x_width=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(contours_x=dict(...), selector=dict(type='surface'))" + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='funnelarea'))" }, - "y": { - "color": { - "description": "Sets the color of the contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contours_y_color=<VALUE>, selector=dict(type='surface'))" - }, + "x": { + "description": "Sets the horizontal domain of this funnelarea trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], "editType": "calc", - "end": { - "description": "Sets the end contour level value. Must be more than `contours.start`", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(contours_y_end=<VALUE>, selector=dict(type='surface'))" - }, - "highlight": { - "description": "Determines whether or not contour lines about the y dimension are highlighted on hover.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_highlight=<VALUE>, selector=dict(type='surface'))" - }, - "highlightcolor": { - "description": "Sets the color of the highlighted contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contours_y_highlightcolor=<VALUE>, selector=dict(type='surface'))" - }, - "highlightwidth": { - "description": "Sets the width of the highlighted contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_y_highlightwidth=<VALUE>, selector=dict(type='surface'))" - }, - "project": { - "editType": "calc", - "role": "object", - "x": { - "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, + "items": [ + { "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_project_x=<VALUE>, selector=dict(type='surface'))" + "max": 1, + "min": 0, + "valType": "number" }, - "y": { - "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='funnelarea'))" + }, + "y": { + "description": "Sets the vertical domain of this funnelarea trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_project_y=<VALUE>, selector=dict(type='surface'))" + "max": 1, + "min": 0, + "valType": "number" }, - "z": { - "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, + { "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_project_z=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(contours_y_project=dict(...), selector=dict(type='surface'))" - }, - "role": "object", - "show": { - "description": "Determines whether or not contour lines about the y dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_show=<VALUE>, selector=dict(type='surface'))" - }, - "size": { - "description": "Sets the step between each contour level. Must be positive.", - "dflt": null, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_y_size=<VALUE>, selector=dict(type='surface'))" - }, - "start": { - "description": "Sets the starting contour level value. Must be less than `contours.end`", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(contours_y_start=<VALUE>, selector=dict(type='surface'))" - }, - "usecolormap": { - "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_y_usecolormap=<VALUE>, selector=dict(type='surface'))" - }, - "width": { - "description": "Sets the width of the contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contours_y_width=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(contours_y=dict(...), selector=dict(type='surface'))" + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='funnelarea'))" }, - "z": { + "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='funnelarea'))" + }, + "marker": { + "colors": { + "description": "Sets the color of each sector. If not specified, the default trace color set is used to pick the sector colors.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='funnelarea'))" + }, + "editType": "calc", + "line": { "color": { - "description": "Sets the color of the contour lines.", - "dflt": "#444", - "editType": "calc", + "arrayOk": true, + "description": "Sets the color of the line enclosing each sector. Defaults to the `paper_bgcolor` value.", + "dflt": null, + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(contours_z_color=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='funnelarea'))" }, "editType": "calc", - "end": { - "description": "Sets the end contour level value. Must be more than `contours.start`", - "dflt": null, - "editType": "calc", + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the line enclosing each sector.", + "dflt": 1, + "editType": "style", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(contours_z_end=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='funnelarea'))" }, - "highlight": { - "description": "Determines whether or not contour lines about the z dimension are highlighted on hover.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_highlight=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='funnelarea'))" + }, + "pattern": { + "bgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='funnelarea'))" }, - "highlightcolor": { - "description": "Sets the color of the highlighted contour lines.", - "dflt": "#444", - "editType": "calc", + "description": "Sets the pattern within the marker.", + "editType": "style", + "fgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(contours_z_highlightcolor=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='funnelarea'))" }, - "highlightwidth": { - "description": "Sets the width of the highlighted contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, + "fgopacity": { + "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", + "editType": "style", + "max": 1, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(contours_z_highlightwidth=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_pattern_fgopacity=<VALUE>, selector=dict(type='funnelarea'))" }, - "project": { - "editType": "calc", - "role": "object", - "x": { - "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_project_x=<VALUE>, selector=dict(type='surface'))" - }, - "y": { - "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_project_y=<VALUE>, selector=dict(type='surface'))" - }, - "z": { - "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_project_z=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(contours_z_project=dict(...), selector=dict(type='surface'))" + "fillmode": { + "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", + "dflt": "replace", + "editType": "style", + "valType": "enumerated", + "values": [ + "replace", + "overlay" + ], + "magic_underscores": "fig.update_traces(marker_pattern_fillmode=<VALUE>, selector=dict(type='funnelarea'))" + }, + "path": { + "arrayOk": true, + "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='funnelarea'))" }, "role": "object", - "show": { - "description": "Determines whether or not contour lines about the z dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_show=<VALUE>, selector=dict(type='surface'))" + "shape": { + "arrayOk": true, + "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", + "dflt": "", + "editType": "style", + "valType": "enumerated", + "values": [ + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." + ], + "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='funnelarea'))" }, "size": { - "description": "Sets the step between each contour level. Must be positive.", - "dflt": null, - "editType": "calc", + "arrayOk": true, + "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", + "dflt": 8, + "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(contours_z_size=<VALUE>, selector=dict(type='surface'))" - }, - "start": { - "description": "Sets the starting contour level value. Must be less than `contours.end`", - "dflt": null, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(contours_z_start=<VALUE>, selector=dict(type='surface'))" - }, - "usecolormap": { - "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contours_z_usecolormap=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='funnelarea'))" }, - "width": { - "description": "Sets the width of the contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, + "solidity": { + "arrayOk": true, + "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", + "dflt": 0.3, + "editType": "style", + "max": 1, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(contours_z_width=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(contours_z=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(contours=dict(...), selector=dict(type='surface'))" + "role": "object", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='funnelarea'))" }, - "hidesurface": { - "description": "Determines whether or not a surface is drawn. For example, set `hidesurface` to *false* `contours.x.show` to *true* and `contours.y.show` to *true* to draw a wire frame plot.", - "dflt": false, + "textfont": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='funnelarea'))" + }, + "description": "Sets the font used for `textinfo`.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='funnelarea'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='funnelarea'))" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='funnelarea'))" + }, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='funnelarea'))" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='funnelarea'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='funnelarea'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='funnelarea'))" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='funnelarea'))" + }, + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='funnelarea'))" + }, + "textinfo": { + "description": "Determines what trace information appears on the graph. Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hidesurface=<VALUE>, selector=dict(type='surface'))" + "extras": [ + "none" + ], + "flags": [ + "label", + "text", + "value", + "percent" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textinfo=<VALUE>, selector=dict(type='funnelarea'))" + }, + "aspectratio": { + "description": "Sets the ratio between height and width", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(aspectratio=<VALUE>, selector=dict(type='funnelarea'))" + }, + "baseratio": { + "description": "Sets the ratio between bottom length and maximum top length.", + "dflt": 0.333, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(baseratio=<VALUE>, selector=dict(type='funnelarea'))" }, "hoverlabel": { "align": { @@ -55963,36 +46673,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='surface'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='funnelarea'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='surface'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='funnelarea'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='surface'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='funnelarea'))" }, "editType": "none", "font": { @@ -56000,12 +46695,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='surface'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='funnelarea'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -56016,12 +46706,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='surface'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='funnelarea'))" }, "lineposition": { "arrayOk": true, @@ -56037,12 +46722,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='surface'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='funnelarea'))" }, "role": "object", "shadow": { @@ -56051,24 +46731,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='surface'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='funnelarea'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='surface'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='funnelarea'))" }, "style": { "arrayOk": true, @@ -56080,12 +46750,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='surface'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='funnelarea'))" }, "textcase": { "arrayOk": true, @@ -56099,12 +46764,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='surface'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='funnelarea'))" }, "variant": { "arrayOk": true, @@ -56120,12 +46780,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='surface'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='funnelarea'))" }, "weight": { "arrayOk": true, @@ -56139,14 +46794,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='surface'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='funnelarea'))" }, "namelength": { "arrayOk": true, @@ -56155,12 +46805,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='surface'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='funnelarea'))" }, "role": "object", "showarrow": { @@ -56168,291 +46813,211 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='funnelarea'))" }, - "lighting": { - "ambient": { - "description": "Ambient light increases overall color visibility but can wash out the image.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='surface'))" + "insidetextfont": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='funnelarea'))" }, - "diffuse": { - "description": "Represents the extent that incident rays are reflected in a range of angles.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='surface'))" + "description": "Sets the font used for `textinfo` lying inside the sector.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='funnelarea'))" }, - "editType": "calc", - "fresnel": { - "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", - "dflt": 0.2, - "editType": "calc", - "max": 5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='surface'))" + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='funnelarea'))" }, "role": "object", - "roughness": { - "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='surface'))" + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='funnelarea'))" }, - "specular": { - "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", - "dflt": 0.05, - "editType": "calc", - "max": 2, - "min": 0, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='surface'))" - }, - "lightposition": { - "editType": "calc", - "role": "object", - "x": { - "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 10, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='surface'))" + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='funnelarea'))" }, - "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 10000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='surface'))" + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='funnelarea'))" }, - "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='surface'))" + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='surface'))" - }, - "opacityscale": { - "description": "Sets the opacityscale. The opacityscale must be an array containing arrays mapping a normalized value to an opacity value. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 1], [0.5, 0.2], [1, 1]]` means that higher/lower values would have higher opacity values and those in the middle would be more transparent Alternatively, `opacityscale` may be a palette name string of the following list: 'min', 'max', 'extremes' and 'uniform'. The default is 'uniform'.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(opacityscale=<VALUE>, selector=dict(type='surface'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='surface'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='surface'))" + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='funnelarea'))" + }, + "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='funnelarea'))" }, - "zcalendar": { - "description": "Sets the calendar system to use with `z` date data.", - "dflt": "gregorian", + "scalegroup": { + "description": "If there are multiple funnelareas that should be sized according to their totals, link them by providing a non-empty group id here shared by every trace in the same group.", + "dflt": "", "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='surface'))" + "valType": "string", + "magic_underscores": "fig.update_traces(scalegroup=<VALUE>, selector=dict(type='funnelarea'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='surface'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='surface'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='surface'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='funnelarea'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='surface'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='funnelarea'))" }, "categories": [ - "gl3d", - "2dMap", + "pie-like", + "funnelarea", "showLegend" ], + "layoutAttributes": { + "extendfunnelareacolors": { + "description": "If `true`, the funnelarea slice colors (whether given by `funnelareacolorway` or inherited from `colorway`) will be extended to three times its original length by first repeating every color 20% lighter then each color 20% darker. This is intended to reduce the likelihood of reusing the same color when you have many slices, but you can set `false` to disable. Colors provided in the trace, using `marker.colors`, are never extended.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "funnelareacolorway": { + "description": "Sets the default funnelarea slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendfunnelareacolors`.", + "editType": "calc", + "valType": "colorlist" + }, + "hiddenlabels": { + "description": "hiddenlabels is the funnelarea & pie chart analog of visible:'legendonly' but it can contain many labels, and can simultaneously hide slices from several pies/funnelarea charts", + "editType": "calc", + "valType": "data_array" + } + }, "meta": { - "description": "The data the describes the coordinates of the surface is set in `z`. Data in `z` should be a {2D array}. Coordinates in `x` and `y` can either be 1D {arrays} or {2D arrays} (e.g. to graph parametric surfaces). If not provided in `x` and `y`, the x and y coordinates are assumed to be linear starting at 0 with a unit step. The color scale corresponds to the `z` values by default. For custom color scales, use `surfacecolor` which should be a {2D array}, where its bounds can be controlled using `cmin` and `cmax`." + "description": "Visualize stages in a process using area-encoded trapezoids. This trace can be used to show data in a part-to-whole representation similar to a \"pie\" trace, wherein each item appears in a single stage. See also the \"funnel\" trace type for a different approach to visualizing funnel data." }, - "type": "surface" + "type": "funnelarea" }, - "mesh3d": { - "animatable": false, + "indicator": { + "animatable": true, "attributes": { - "type": "mesh3d", + "type": "indicator", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='indicator'))" }, "uid": { + "anim": true, "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='mesh3d'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='mesh3d'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='mesh3d'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='mesh3d'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='mesh3d'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='indicator'))" }, - "legendgrouptitle": { - "editType": "style", + "title": { + "align": { + "description": "Sets the horizontal alignment of the title. It defaults to `center` except for bullet charts for which it defaults to right.", + "editType": "plot", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(title_align=<VALUE>, selector=dict(type='indicator'))" + }, + "editType": "plot", "font": { "color": { - "editType": "style", + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_color=<VALUE>, selector=dict(type='indicator'))" }, - "description": "Sets this legend group's title font.", - "editType": "style", + "description": "Set the font used to display the title", + "editType": "plot", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_family=<VALUE>, selector=dict(type='indicator'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "style", + "editType": "plot", "extras": [ "none" ], @@ -56462,37 +47027,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_lineposition=<VALUE>, selector=dict(type='indicator'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "style", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_shadow=<VALUE>, selector=dict(type='indicator'))" }, "size": { - "editType": "style", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_size=<VALUE>, selector=dict(type='indicator'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "style", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_style=<VALUE>, selector=dict(type='indicator'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "style", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -56500,12 +47065,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_textcase=<VALUE>, selector=dict(type='indicator'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "style", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -56515,12 +47080,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_variant=<VALUE>, selector=dict(type='indicator'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "style", + "editType": "plot", "extras": [ "normal", "bold" @@ -56528,521 +47093,323 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font_weight=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_font=dict(...), selector=dict(type='indicator'))" }, "role": "object", "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", + "description": "Sets the title of this indicator.", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(title_text=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='mesh3d'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='mesh3d'))" - }, - "opacity": { - "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='mesh3d'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the X coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='mesh3d'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the Y coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the Z coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='mesh3d'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "i": { - "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *first* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `i[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `i` represents a point in space, which is the first vertex of a triangle.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(i=<VALUE>, selector=dict(type='mesh3d'))" - }, - "isrc": { - "description": "Sets the source reference on Chart Studio Cloud for `i`.", - "editType": "none", - "valType": "string" - }, - "j": { - "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *second* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `j[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `j` represents a point in space, which is the second vertex of a triangle.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(j=<VALUE>, selector=dict(type='mesh3d'))" - }, - "jsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `j`.", - "editType": "none", - "valType": "string" - }, - "k": { - "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *third* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `k[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `k` represents a point in space, which is the third vertex of a triangle.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(k=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ksrc": { - "description": "Sets the source reference on Chart Studio Cloud for `k`.", - "editType": "none", - "valType": "string" - }, - "facecolor": { - "description": "Sets the color of each face Overrides *color* and *vertexcolor*.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(facecolor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "facecolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `facecolor`.", - "editType": "none", - "valType": "string" - }, - "intensity": { - "description": "Sets the intensity values for vertices or cells as defined by `intensitymode`. It can be used for plotting fields on meshes.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(intensity=<VALUE>, selector=dict(type='mesh3d'))" - }, - "intensitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `intensity`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(title=dict(...), selector=dict(type='indicator'))" }, - "intensitymode": { - "description": "Determines the source of `intensity` values.", - "dflt": "vertex", + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, "editType": "calc", "valType": "enumerated", "values": [ - "vertex", - "cell" + true, + false, + "legendonly" ], - "magic_underscores": "fig.update_traces(intensitymode=<VALUE>, selector=dict(type='mesh3d'))" - }, - "vertexcolor": { - "description": "Sets the color of each vertex Overrides *color*. While Red, green and blue colors are in the range of 0 and 255; in the case of having vertex color data in RGBA format, the alpha color should be normalized to be between 0 and 1.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(vertexcolor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "vertexcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `vertexcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='indicator'))" }, - "text": { - "arrayOk": true, - "description": "Sets the text elements associated with the vertices. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='mesh3d'))" + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='indicator'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='indicator'))" }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='mesh3d'))" + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='indicator'))" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='indicator'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='indicator'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='indicator'))" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='indicator'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='indicator'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='indicator'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='indicator'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='indicator'))" + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='indicator'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='indicator'))" }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", + "mode": { + "description": "Determines how the value is displayed on the graph. `number` displays the value numerically in text. `delta` displays the difference to a reference value in text. Finally, `gauge` displays the value graphically on an axis.", + "dflt": "number", "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], "flags": [ - "x", - "y", - "z", - "text", - "name" + "number", + "delta", + "gauge" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='mesh3d'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='indicator'))" }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", + "ids": { + "anim": true, + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='mesh3d'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='indicator'))" }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", + "value": { + "anim": true, + "description": "Sets the number to be displayed.", "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='mesh3d'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='mesh3d'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='mesh3d'))" + "valType": "number", + "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='indicator'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='mesh3d'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='indicator'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='mesh3d'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='mesh3d'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='mesh3d'))" - }, - "color": { - "description": "Sets the color of the whole mesh", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(color=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='indicator'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this indicator trace.", "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='mesh3d'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='mesh3d'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='mesh3d'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='mesh3d'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='mesh3d'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='mesh3d'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", + "editType": "calc", "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='mesh3d'))" + "valType": "integer", + "magic_underscores": "fig.update_traces(domain_column=<VALUE>, selector=dict(type='indicator'))" }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "editType": "calc", + "role": "object", + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this indicator trace.", "dflt": 0, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='mesh3d'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='mesh3d'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='mesh3d'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(domain_row=<VALUE>, selector=dict(type='indicator'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" + "x": { + "description": "Sets the horizontal domain of this indicator trace (in plot fraction).", + "dflt": [ + 0, + 1 ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='mesh3d'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='mesh3d'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='mesh3d'))" + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_x=list(...), selector=dict(type='indicator'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" + "y": { + "description": "Sets the vertical domain of this indicator trace (in plot fraction).", + "dflt": [ + 0, + 1 ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='mesh3d'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='mesh3d'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='mesh3d'))" + "valType": "info_array", + "magic_underscores": "fig.update_traces(domain_y=list(...), selector=dict(type='indicator'))" }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(domain=dict(...), selector=dict(type='indicator'))" + }, + "align": { + "description": "Sets the horizontal alignment of the `text` within the box. Note that this attribute has no effect if an angular gauge is displayed: in this case, it is always centered", + "editType": "plot", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(align=<VALUE>, selector=dict(type='indicator'))" + }, + "delta": { + "decreasing": { + "color": { + "description": "Sets the color for increasing value.", + "dflt": "#FF4136", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(delta_decreasing_color=<VALUE>, selector=dict(type='indicator'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='mesh3d'))" + "editType": "plot", + "role": "object", + "symbol": { + "description": "Sets the symbol to display for increasing value", + "dflt": "\u25bc", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(delta_decreasing_symbol=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(delta_decreasing=dict(...), selector=dict(type='indicator'))" }, - "tickfont": { + "editType": "calc", + "font": { "color": { - "editType": "colorbars", + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_color=<VALUE>, selector=dict(type='indicator'))" }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", + "description": "Set the font used to display the delta", + "editType": "plot", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_family=<VALUE>, selector=dict(type='indicator'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "colorbars", + "editType": "plot", "extras": [ "none" ], @@ -57052,37 +47419,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_lineposition=<VALUE>, selector=dict(type='indicator'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "colorbars", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_shadow=<VALUE>, selector=dict(type='indicator'))" }, "size": { - "editType": "colorbars", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_size=<VALUE>, selector=dict(type='indicator'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "colorbars", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_style=<VALUE>, selector=dict(type='indicator'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "colorbars", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -57090,12 +47457,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_textcase=<VALUE>, selector=dict(type='indicator'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -57105,12 +47472,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_variant=<VALUE>, selector=dict(type='indicator'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "plot", "extras": [ "normal", "bold" @@ -57118,590 +47485,100 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='mesh3d'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='mesh3d'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font_weight=<VALUE>, selector=dict(type='indicator'))" }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='mesh3d'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_font=dict(...), selector=dict(type='indicator'))" }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='mesh3d'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='mesh3d'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='mesh3d'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='mesh3d'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='mesh3d'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='mesh3d'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='mesh3d'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='mesh3d'))" + "increasing": { + "color": { + "description": "Sets the color for increasing value.", + "dflt": "#3D9970", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(delta_increasing_color=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='mesh3d'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='mesh3d'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='mesh3d'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='mesh3d'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='mesh3d'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='mesh3d'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='mesh3d'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='mesh3d'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='mesh3d'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='mesh3d'))" - }, - "reversescale": { - "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='mesh3d'))" - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='mesh3d'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here `intensity`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='mesh3d'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as `intensity` and if set, `cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='mesh3d'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `intensity`. Has no effect when `cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='mesh3d'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as `intensity` and if set, `cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='mesh3d'))" - }, - "alphahull": { - "description": "Determines how the mesh surface triangles are derived from the set of vertices (points) represented by the `x`, `y` and `z` arrays, if the `i`, `j`, `k` arrays are not supplied. For general use of `mesh3d` it is preferred that `i`, `j`, `k` are supplied. If *-1*, Delaunay triangulation is used, which is mainly suitable if the mesh is a single, more or less layer surface that is perpendicular to `delaunayaxis`. In case the `delaunayaxis` intersects the mesh surface at more than one point it will result triangles that are very long in the dimension of `delaunayaxis`. If *>0*, the alpha-shape algorithm is used. In this case, the positive `alphahull` value signals the use of the alpha-shape algorithm, _and_ its value acts as the parameter for the mesh fitting. If *0*, the convex-hull algorithm is used. It is suitable for convex bodies or if the intention is to enclose the `x`, `y` and `z` point set into a convex hull.", - "dflt": -1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(alphahull=<VALUE>, selector=dict(type='mesh3d'))" - }, - "delaunayaxis": { - "description": "Sets the Delaunay axis, which is the axis that is perpendicular to the surface of the Delaunay triangulation. It has an effect if `i`, `j`, `k` are not provided and `alphahull` is set to indicate Delaunay triangulation.", - "dflt": "z", - "editType": "calc", - "valType": "enumerated", - "values": [ - "x", - "y", - "z" - ], - "magic_underscores": "fig.update_traces(delaunayaxis=<VALUE>, selector=dict(type='mesh3d'))" - }, - "contour": { - "color": { - "description": "Sets the color of the contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='mesh3d'))" - }, - "editType": "calc", - "role": "object", - "show": { - "description": "Sets whether or not dynamic contours are shown on hover", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='mesh3d'))" - }, - "width": { - "description": "Sets the width of the contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='mesh3d'))" + "editType": "plot", + "role": "object", + "symbol": { + "description": "Sets the symbol to display for increasing value", + "dflt": "\u25b2", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(delta_increasing_symbol=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(delta_increasing=dict(...), selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='mesh3d'))" - }, - "flatshading": { - "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='mesh3d'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", + "position": { + "description": "Sets the position of delta with respect to the number.", + "dflt": "bottom", + "editType": "plot", "valType": "enumerated", "values": [ + "top", + "bottom", "left", - "right", - "auto" + "right" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(delta_position=<VALUE>, selector=dict(type='indicator'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "prefix": { + "description": "Sets a prefix appearing before the delta.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(delta_prefix=<VALUE>, selector=dict(type='indicator'))" }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='mesh3d'))" + "reference": { + "description": "Sets the reference value to compute the delta. By default, it is set to the current value.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(delta_reference=<VALUE>, selector=dict(type='indicator'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "relative": { + "description": "Show relative change", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(delta_relative=<VALUE>, selector=dict(type='indicator'))" }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='mesh3d'))" + "role": "object", + "suffix": { + "description": "Sets a suffix appearing next to the delta.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(delta_suffix=<VALUE>, selector=dict(type='indicator'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "valueformat": { + "description": "Sets the value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(delta_valueformat=<VALUE>, selector=dict(type='indicator'))" }, - "editType": "none", + "magic_underscores": "fig.update_traces(delta=dict(...), selector=dict(type='indicator'))" + }, + "number": { + "editType": "plot", "font": { "color": { - "arrayOk": true, - "editType": "none", + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='mesh3d'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_color=<VALUE>, selector=dict(type='indicator'))" }, - "description": "Sets the font used in hover labels.", - "editType": "none", + "description": "Set the font used to display main number", + "editType": "plot", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", + "editType": "plot", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='mesh3d'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_family=<VALUE>, selector=dict(type='indicator'))" }, "lineposition": { - "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "none", + "editType": "plot", "extras": [ "none" ], @@ -57711,61 +47588,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_lineposition=<VALUE>, selector=dict(type='indicator'))" }, "role": "object", "shadow": { - "arrayOk": true, "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "none", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_shadow=<VALUE>, selector=dict(type='indicator'))" }, "size": { - "arrayOk": true, - "editType": "none", + "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='mesh3d'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_size=<VALUE>, selector=dict(type='indicator'))" }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "none", + "editType": "plot", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='mesh3d'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_style=<VALUE>, selector=dict(type='indicator'))" }, "textcase": { - "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "none", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -57773,18 +47626,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_textcase=<VALUE>, selector=dict(type='indicator'))" }, "variant": { - "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "none", + "editType": "plot", "valType": "enumerated", "values": [ "normal", @@ -57794,18 +47641,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='mesh3d'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_variant=<VALUE>, selector=dict(type='indicator'))" }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "none", + "editType": "plot", "extras": [ "normal", "bold" @@ -57813,896 +47654,699 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='mesh3d'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(number_font_weight=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='mesh3d'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='mesh3d'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='mesh3d'))" - }, - "lighting": { - "ambient": { - "description": "Ambient light increases overall color visibility but can wash out the image.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='mesh3d'))" - }, - "diffuse": { - "description": "Represents the extent that incident rays are reflected in a range of angles.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='mesh3d'))" - }, - "editType": "calc", - "facenormalsepsilon": { - "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-06, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='mesh3d'))" - }, - "fresnel": { - "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", - "dflt": 0.2, - "editType": "calc", - "max": 5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='mesh3d'))" - }, - "role": "object", - "roughness": { - "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='mesh3d'))" - }, - "specular": { - "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", - "dflt": 0.05, - "editType": "calc", - "max": 2, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(number_font=dict(...), selector=dict(type='indicator'))" }, - "vertexnormalsepsilon": { - "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-12, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='mesh3d'))" + "prefix": { + "description": "Sets a prefix appearing before the number.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(number_prefix=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='mesh3d'))" - }, - "lightposition": { - "editType": "calc", "role": "object", - "x": { - "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='mesh3d'))" - }, - "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='mesh3d'))" - }, - "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='mesh3d'))" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='mesh3d'))" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='mesh3d'))" - }, - "zcalendar": { - "description": "Sets the calendar system to use with `z` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ], - "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='mesh3d'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='mesh3d'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='mesh3d'))" + "suffix": { + "description": "Sets a suffix appearing next to the number.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(number_suffix=<VALUE>, selector=dict(type='indicator'))" }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, + "valueformat": { + "description": "Sets the value formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.", + "dflt": "", + "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='mesh3d'))" + "magic_underscores": "fig.update_traces(number_valueformat=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='mesh3d'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='mesh3d'))" - }, - "categories": [ - "gl3d", - "showLegend" - ], - "meta": { - "description": "Draws sets of triangles with coordinates given by three 1-dimensional arrays in `x`, `y`, `z` and (1) a sets of `i`, `j`, `k` indices (2) Delaunay triangulation or (3) the Alpha-shape algorithm or (4) the Convex-hull algorithm" - }, - "type": "mesh3d" - }, - "cone": { - "animatable": false, - "attributes": { - "type": "cone", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='cone'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='cone'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='cone'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='cone'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='cone'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='cone'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(number=dict(...), selector=dict(type='indicator'))" }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='cone'))" + "gauge": { + "axis": { + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "plot", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(gauge_axis_dtick_impliedEdits=<VALUE>, selector=dict(type='indicator'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(gauge_axis_dtick=<VALUE>, selector=dict(type='indicator'))" }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='cone'))" + "editType": "plot", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "plot", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(gauge_axis_exponentformat=<VALUE>, selector=dict(type='indicator'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(gauge_axis_labelalias=<VALUE>, selector=dict(type='indicator'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_axis_minexponent=<VALUE>, selector=dict(type='indicator'))" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(gauge_axis_nticks=<VALUE>, selector=dict(type='indicator'))" + }, + "range": { + "description": "Sets the range of this axis.", + "editType": "plot", + "items": [ + { + "editType": "plot", + "valType": "number" + }, + { + "editType": "plot", + "valType": "number" + } ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='cone'))" + "valType": "info_array", + "magic_underscores": "fig.update_traces(gauge_axis_range=list(...), selector=dict(type='indicator'))" }, "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='cone'))" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='cone'))" + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(gauge_axis_separatethousands=<VALUE>, selector=dict(type='indicator'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "plot", "valType": "enumerated", "values": [ - "normal", - "italic" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_axis_showexponent=<VALUE>, selector=dict(type='indicator'))" }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(gauge_axis_showticklabels=<VALUE>, selector=dict(type='indicator'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "plot", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_axis_showtickprefix=<VALUE>, selector=dict(type='indicator'))" }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "plot", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_axis_showticksuffix=<VALUE>, selector=dict(type='indicator'))" }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='cone'))" + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "plot", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(gauge_axis_tick0_impliedEdits=<VALUE>, selector=dict(type='indicator'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(gauge_axis_tick0=<VALUE>, selector=dict(type='indicator'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='cone'))" - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='cone'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='cone'))" - }, - "opacity": { - "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='cone'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='cone'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the x coordinates of the vector field and of the displayed cones.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='cone'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the y coordinates of the vector field and of the displayed cones.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='cone'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the z coordinates of the vector field and of the displayed cones.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='cone'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "u": { - "description": "Sets the x components of the vector field.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(u=<VALUE>, selector=dict(type='cone'))" - }, - "usrc": { - "description": "Sets the source reference on Chart Studio Cloud for `u`.", - "editType": "none", - "valType": "string" - }, - "v": { - "description": "Sets the y components of the vector field.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(v=<VALUE>, selector=dict(type='cone'))" - }, - "vsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `v`.", - "editType": "none", - "valType": "string" - }, - "w": { - "description": "Sets the z components of the vector field.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(w=<VALUE>, selector=dict(type='cone'))" - }, - "wsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `w`.", - "editType": "none", - "valType": "string" - }, - "text": { - "arrayOk": true, - "description": "Sets the text elements associated with the cones. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='cone'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Same as `text`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='cone'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "x+y+z+norm+text+name", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "u", - "v", - "w", - "norm", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='cone'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `norm` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='cone'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='cone'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "uhoverformat": { - "description": "Sets the hover text formatting rulefor `u` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(uhoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "vhoverformat": { - "description": "Sets the hover text formatting rulefor `v` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(vhoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "whoverformat": { - "description": "Sets the hover text formatting rulefor `w` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(whoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='cone'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='cone'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='cone'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='cone'))" - }, - "colorbar": { + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "plot", + "valType": "angle", + "magic_underscores": "fig.update_traces(gauge_axis_tickangle=<VALUE>, selector=dict(type='indicator'))" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(gauge_axis_tickcolor=<VALUE>, selector=dict(type='indicator'))" + }, + "tickfont": { + "color": { + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_color=<VALUE>, selector=dict(type='indicator'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_family=<VALUE>, selector=dict(type='indicator'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_lineposition=<VALUE>, selector=dict(type='indicator'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_shadow=<VALUE>, selector=dict(type='indicator'))" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_size=<VALUE>, selector=dict(type='indicator'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_style=<VALUE>, selector=dict(type='indicator'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_textcase=<VALUE>, selector=dict(type='indicator'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_variant=<VALUE>, selector=dict(type='indicator'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(gauge_axis_tickfont_weight=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_axis_tickfont=dict(...), selector=dict(type='indicator'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(gauge_axis_tickformat=<VALUE>, selector=dict(type='indicator'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "plot", + "items": [ + { + "editType": "plot", + "valType": "any" + }, + { + "editType": "plot", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "plot", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "plot", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "plot", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "plot", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(gauge_axis_tickformatstops=list(...), selector=dict(type='indicator'))" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "plot", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(gauge_axis_ticklabelstep=<VALUE>, selector=dict(type='indicator'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_axis_ticklen=<VALUE>, selector=dict(type='indicator'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "plot", + "impliedEdits": { + "magic_underscores": "fig.update_traces(gauge_axis_tickmode_impliedEdits=<VALUE>, selector=dict(type='indicator'))" + }, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(gauge_axis_tickmode=<VALUE>, selector=dict(type='indicator'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(gauge_axis_tickprefix=<VALUE>, selector=dict(type='indicator'))" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "outside", + "editType": "plot", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(gauge_axis_ticks=<VALUE>, selector=dict(type='indicator'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(gauge_axis_ticksuffix=<VALUE>, selector=dict(type='indicator'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "plot", + "valType": "data_array", + "magic_underscores": "fig.update_traces(gauge_axis_ticktext=<VALUE>, selector=dict(type='indicator'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "plot", + "valType": "data_array", + "magic_underscores": "fig.update_traces(gauge_axis_tickvals=<VALUE>, selector=dict(type='indicator'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_axis_tickwidth=<VALUE>, selector=dict(type='indicator'))" + }, + "visible": { + "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false", + "dflt": true, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(gauge_axis_visible=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_axis=dict(...), selector=dict(type='indicator'))" + }, + "bar": { + "color": { + "description": "Sets the background color of the arc.", + "dflt": "green", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(gauge_bar_color=<VALUE>, selector=dict(type='indicator'))" + }, + "description": "Set the appearance of the gauge's value", + "editType": "calc", + "line": { + "color": { + "description": "Sets the color of the line enclosing each sector.", + "dflt": "#444", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(gauge_bar_line_color=<VALUE>, selector=dict(type='indicator'))" + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the width (in px) of the line enclosing each sector.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_bar_line_width=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_bar_line=dict(...), selector=dict(type='indicator'))" + }, + "role": "object", + "thickness": { + "description": "Sets the thickness of the bar as a fraction of the total thickness of the gauge.", + "dflt": 1, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_bar_thickness=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_bar=dict(...), selector=dict(type='indicator'))" + }, "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", + "description": "Sets the gauge background color.", + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_bgcolor=<VALUE>, selector=dict(type='indicator'))" }, "bordercolor": { - "description": "Sets the axis line color.", + "description": "Sets the color of the border enclosing the gauge.", "dflt": "#444", - "editType": "colorbars", + "editType": "plot", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_bordercolor=<VALUE>, selector=dict(type='indicator'))" }, "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='cone'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='cone'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='cone'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='cone'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='cone'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='cone'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='cone'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='cone'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='cone'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='cone'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", + "description": "Sets the width (in px) of the border enclosing the gauge.", "dflt": 1, - "editType": "colorbars", + "editType": "plot", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_borderwidth=<VALUE>, selector=dict(type='indicator'))" }, + "description": "The gauge of the Indicator plot.", + "editType": "plot", "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='cone'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='cone'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='cone'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='cone'))" - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='cone'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='cone'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", + "shape": { + "description": "Set the shape of the gauge", + "dflt": "angular", + "editType": "plot", "valType": "enumerated", "values": [ - "fraction", - "pixels" + "angular", + "bullet" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(gauge_shape=<VALUE>, selector=dict(type='indicator'))" }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='cone'))" + "steps": { + "items": { + "step": { + "color": { + "description": "Sets the background color of the arc.", + "editType": "plot", + "valType": "color" + }, + "editType": "calc", + "line": { + "color": { + "description": "Sets the color of the line enclosing each sector.", + "dflt": "#444", + "editType": "plot", + "valType": "color" + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the width (in px) of the line enclosing each sector.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + } + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "range": { + "description": "Sets the range of this axis.", + "editType": "plot", + "items": [ + { + "editType": "plot", + "valType": "number" + }, + { + "editType": "plot", + "valType": "number" + } + ], + "valType": "info_array" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "thickness": { + "description": "Sets the thickness of the bar as a fraction of the total thickness of the gauge.", + "dflt": 1, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + } + } }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='cone'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='cone'))" + "role": "object", + "magic_underscores": "fig.update_traces(gauge_steps=list(...), selector=dict(type='indicator'))" }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='cone'))" + "threshold": { + "editType": "plot", + "line": { + "color": { + "description": "Sets the color of the threshold line.", + "dflt": "#444", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(gauge_threshold_line_color=<VALUE>, selector=dict(type='indicator'))" + }, + "editType": "plot", + "role": "object", + "width": { + "description": "Sets the width (in px) of the threshold line.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_threshold_line_width=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_threshold_line=dict(...), selector=dict(type='indicator'))" + }, + "role": "object", + "thickness": { + "description": "Sets the thickness of the threshold line as a fraction of the thickness of the gauge.", + "dflt": 0.85, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_threshold_thickness=<VALUE>, selector=dict(type='indicator'))" + }, + "value": { + "description": "Sets a treshold value drawn as a line.", + "dflt": false, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(gauge_threshold_value=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(gauge_threshold=dict(...), selector=dict(type='indicator'))" }, - "tickfont": { + "magic_underscores": "fig.update_traces(gauge=dict(...), selector=dict(type='indicator'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='indicator'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='indicator'))" + }, + "categories": [ + "svg", + "noOpacity", + "noHover" + ], + "meta": { + "description": "An indicator is used to visualize a single `value` along with some contextual information such as `steps` or a `threshold`, using a combination of three visual elements: a number, a delta, and/or a gauge. Deltas are taken with respect to a `reference`. Gauges can be either angular or bullet (aka linear) gauges." + }, + "type": "indicator" + }, + "scatter3d": { + "animatable": false, + "attributes": { + "type": "scatter3d", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scatter3d'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scatter3d'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scatter3d'))" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scatter3d'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scatter3d'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scatter3d'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { "color": { - "editType": "colorbars", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scatter3d'))" }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", + "description": "Sets this legend group's title font.", + "editType": "style", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", + "editType": "style", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scatter3d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "colorbars", + "editType": "style", "extras": [ "none" ], @@ -58712,37 +48356,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "colorbars", + "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" }, "size": { - "editType": "colorbars", + "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scatter3d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "colorbars", + "editType": "style", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scatter3d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "colorbars", + "editType": "style", "valType": "enumerated", "values": [ "normal", @@ -58750,12 +48394,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "style", "valType": "enumerated", "values": [ "normal", @@ -58765,215 +48409,516 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scatter3d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "style", "extras": [ "normal", "bold" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='cone'))" + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scatter3d'))" + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scatter3d'))" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scatter3d'))" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "dflt": "lines+markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scatter3d'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatter3d'))" + }, + "x": { + "description": "Sets the x coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='scatter3d'))" + }, + "y": { + "description": "Sets the y coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='scatter3d'))" + }, + "z": { + "description": "Sets the z coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='scatter3d'))" + }, + "surfacecolor": { + "description": "Sets the surface fill color.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(surfacecolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y,z) triplet. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y,z) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatter3d'))" + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "top center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatter3d'))" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. ", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scatter3d'))" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatter3d'))" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y,z) triplet. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y,z) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatter3d'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "text", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatter3d'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scatter3d'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatter3d'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='scatter3d'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='scatter3d'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatter3d'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatter3d'))" + }, + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='scatter3d'))" + }, + "marker": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scatter3d'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scatter3d'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scatter3d'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scatter3d'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scatter3d'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scatter3d'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scatter3d'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scatter3d'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='cone'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='cone'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scatter3d'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='cone'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='cone'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='cone'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='cone'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='cone'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='cone'))" + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scatter3d'))" }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='cone'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='cone'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='cone'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='cone'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='cone'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='cone'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='cone'))" - }, - "title": { - "editType": "colorbars", - "font": { + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickfont": { "color": { - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scatter3d'))" }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", + "description": "Sets the color bar's tick label font", + "editType": "calc", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", + "editType": "calc", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scatter3d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "extras": [ "none" ], @@ -58983,37 +48928,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scatter3d'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scatter3d'))" }, "size": { - "editType": "colorbars", + "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scatter3d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scatter3d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -59021,12 +48966,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scatter3d'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -59036,12 +48981,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scatter3d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "extras": [ "normal", "bold" @@ -59049,1739 +48994,1708 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='cone'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='cone'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='cone'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='cone'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='cone'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='cone'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='cone'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='cone'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='cone'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='cone'))" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='cone'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='cone'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='cone'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='cone'))" - }, - "reversescale": { - "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='cone'))" - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='cone'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='cone'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='cone'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v/w norm. Has no effect when `cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='cone'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='cone'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='cone'))" - }, - "anchor": { - "description": "Sets the cones' anchor with respect to their x/y/z positions. Note that *cm* denote the cone's center of mass which corresponds to 1/4 from the tail to tip.", - "dflt": "cm", - "editType": "calc", - "valType": "enumerated", - "values": [ - "tip", - "tail", - "cm", - "center" - ], - "magic_underscores": "fig.update_traces(anchor=<VALUE>, selector=dict(type='cone'))" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='cone'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='cone'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='cone'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='cone'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='cone'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='cone'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scatter3d'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scatter3d'))" }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='cone'))" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scatter3d'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scatter3d'))" }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scatter3d'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scatter3d'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "auto", + "linear", + "array" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scatter3d'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scatter3d'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "outside", + "inside", + "" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='cone'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scatter3d'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scatter3d'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='cone'))" + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatter3d'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='cone'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='cone'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='cone'))" - }, - "lighting": { - "ambient": { - "description": "Ambient light increases overall color visibility but can wash out the image.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='cone'))" - }, - "diffuse": { - "description": "Represents the extent that incident rays are reflected in a range of angles.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='cone'))" - }, - "editType": "calc", - "facenormalsepsilon": { - "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-06, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='cone'))" - }, - "fresnel": { - "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", - "dflt": 0.2, - "editType": "calc", - "max": 5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='cone'))" - }, - "role": "object", - "roughness": { - "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='cone'))" - }, - "specular": { - "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", - "dflt": 0.05, - "editType": "calc", - "max": 2, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='cone'))" - }, - "vertexnormalsepsilon": { - "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-12, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='cone'))" - }, - "lightposition": { - "editType": "calc", - "role": "object", - "x": { - "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='cone'))" - }, - "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='cone'))" - }, - "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='cone'))" - }, - "sizemode": { - "description": "Determines whether `sizeref` is set as a *scaled* (i.e unitless) scalar (normalized by the max u/v/w norm in the vector field) or as *absolute* value (in the same units as the vector field). To display sizes in actual vector length use *raw*.", - "dflt": "scaled", - "editType": "calc", - "valType": "enumerated", - "values": [ - "scaled", - "absolute", - "raw" - ], - "magic_underscores": "fig.update_traces(sizemode=<VALUE>, selector=dict(type='cone'))" - }, - "sizeref": { - "description": "Adjusts the cone size scaling. The size of the cones is determined by their u/v/w norm multiplied a factor and `sizeref`. This factor (computed internally) corresponds to the minimum \"time\" to travel across two successive x/y/z positions at the average velocity of those two successive positions. All cones in a given trace use the same factor. With `sizemode` set to *raw*, its default value is *1*. With `sizemode` set to *scaled*, `sizeref` is unitless, its default value is *0.5*. With `sizemode` set to *absolute*, `sizeref` has the same units as the u/v/w vector field, its the default value is half the sample's maximum vector norm.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(sizeref=<VALUE>, selector=dict(type='cone'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='cone'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='cone'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='cone'))" - }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='cone'))" - }, - "categories": [ - "gl3d", - "showLegend" - ], - "meta": { - "description": "Use cone traces to visualize vector fields. Specify a vector field using 6 1D arrays, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, `w`. The cones are drawn exactly at the positions given by `x`, `y` and `z`." - }, - "type": "cone" - }, - "streamtube": { - "animatable": false, - "attributes": { - "type": "streamtube", - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='streamtube'))" - }, - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='streamtube'))" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='streamtube'))" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, - "editType": "style", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='streamtube'))" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='streamtube'))" - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='streamtube'))" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='streamtube'))" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='streamtube'))" + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scatter3d'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scatter3d'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scatter3d'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scatter3d'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scatter3d'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scatter3d'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scatter3d'))" }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='streamtube'))" + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scatter3d'))" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scatter3d'))" }, - "size": { - "editType": "style", - "min": 1, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scatter3d'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scatter3d'))" }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scatter3d'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "top", + "middle", + "bottom" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scatter3d'))" }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scatter3d'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='streamtube'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" + "container", + "paper" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatter3d'))" }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='streamtube'))" + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='streamtube'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='streamtube'))" - }, - "opacity": { - "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='streamtube'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='streamtube'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "x": { - "description": "Sets the x coordinates of the vector field.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='streamtube'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the y coordinates of the vector field.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='streamtube'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the z coordinates of the vector field.", - "editType": "calc+clearAxisTypes", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='streamtube'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "u": { - "description": "Sets the x components of the vector field.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(u=<VALUE>, selector=dict(type='streamtube'))" - }, - "usrc": { - "description": "Sets the source reference on Chart Studio Cloud for `u`.", - "editType": "none", - "valType": "string" - }, - "v": { - "description": "Sets the y components of the vector field.", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(v=<VALUE>, selector=dict(type='streamtube'))" - }, - "vsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `v`.", - "editType": "none", - "valType": "string" - }, - "w": { - "description": "Sets the z components of the vector field.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(w=<VALUE>, selector=dict(type='streamtube'))" - }, - "wsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `w`.", - "editType": "none", - "valType": "string" - }, - "text": { - "description": "Sets a text element associated with this trace. If trace `hoverinfo` contains a *text* flag, this text element will be seen in all hover labels. Note that streamtube traces do not support array `text` values.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='streamtube'))" - }, - "hovertext": { - "description": "Same as `text`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='streamtube'))" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "x+y+z+norm+text+name", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "u", - "v", - "w", - "norm", - "divergence", - "text", - "name" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='streamtube'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `tubex`, `tubey`, `tubez`, `tubeu`, `tubev`, `tubew`, `norm` and `divergence`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='streamtube'))" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='streamtube'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "uhoverformat": { - "description": "Sets the hover text formatting rulefor `u` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(uhoverformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "vhoverformat": { - "description": "Sets the hover text formatting rulefor `v` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(vhoverformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "whoverformat": { - "description": "Sets the hover text formatting rulefor `w` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", - "dflt": "", - "editType": "none", - "valType": "string", - "magic_underscores": "fig.update_traces(whoverformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='streamtube'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='streamtube'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", - "editType": "calc+clearAxisTypes", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='streamtube'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='streamtube'))" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='streamtube'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='streamtube'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='streamtube'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='scatter3d'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='scatter3d'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "width": { + "arrayOk": false, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatter3d'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='streamtube'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='streamtube'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatter3d'))" }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", + "opacity": { + "arrayOk": false, + "description": "Sets the marker opacity. Note that the marker opacity for scatter3d traces must be a scalar value for performance reasons. To set a blending opacity value (i.e. which is not transparent), set *marker.color* to an rgba color and use its alpha channel.", + "editType": "calc", + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatter3d'))" }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='streamtube'))" + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scatter3d'))" }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 8, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scatter3d'))" }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", "dflt": 0, - "editType": "colorbars", + "editType": "calc", "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='streamtube'))" + "valType": "number", + "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scatter3d'))" }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", "valType": "enumerated", "values": [ - "h", - "v" + "diameter", + "area" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='streamtube'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scatter3d'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", "dflt": 1, - "editType": "colorbars", - "min": 0, + "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='streamtube'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatter3d'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type.", + "dflt": "circle", + "editType": "calc", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "circle", + "circle-open", + "cross", + "diamond", + "diamond-open", + "square", + "square-open", + "x" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatter3d'))" }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatter3d'))" + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `line.colorscale`. Has an effect only if in `line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, - "editType": "colorbars", + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='streamtube'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_autocolorscale=<VALUE>, selector=dict(type='scatter3d'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='streamtube'))" + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `line.color`) or the bounds set in `line.cmin` and `line.cmax` Has an effect only if in `line.color` is set to a numerical array. Defaults to `false` when `line.cmin` and `line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(line_cauto_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(line_cauto=<VALUE>, selector=dict(type='scatter3d'))" }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(line_cmax_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='streamtube'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_cmax=<VALUE>, selector=dict(type='scatter3d'))" }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `line.cmin` and/or `line.cmax` to be equidistant to this point. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color`. Has no effect when `line.cauto` is `false`.", + "dflt": null, + "editType": "calc", "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_cmid_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='streamtube'))" + "valType": "number", + "magic_underscores": "fig.update_traces(line_cmid=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='streamtube'))" + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(line_cmin_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(line_cmin=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", + "color": { + "arrayOk": true, + "description": "Sets the line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `line.cmin` and `line.cmax` if set.", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickfont": { - "color": { - "editType": "colorbars", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(line_coloraxis=<VALUE>, selector=dict(type='scatter3d'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_colorbar_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_borderwidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(line_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(line_colorbar_dtick=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(line_colorbar_exponentformat=<VALUE>, selector=dict(type='scatter3d'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(line_colorbar_labelalias=<VALUE>, selector=dict(type='scatter3d'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_len=<VALUE>, selector=dict(type='scatter3d'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(line_colorbar_lenmode=<VALUE>, selector=dict(type='scatter3d'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_minexponent=<VALUE>, selector=dict(type='scatter3d'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(line_colorbar_nticks=<VALUE>, selector=dict(type='scatter3d'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(line_colorbar_orientation=<VALUE>, selector=dict(type='scatter3d'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_colorbar_outlinecolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_outlinewidth=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(line_colorbar_separatethousands=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(line_colorbar_showexponent=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(line_colorbar_showticklabels=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(line_colorbar_showtickprefix=<VALUE>, selector=dict(type='scatter3d'))" + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(line_colorbar_showticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_thickness=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(line_colorbar_thicknessmode=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(line_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(line_colorbar_tick0=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle", + "magic_underscores": "fig.update_traces(line_colorbar_tickangle=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_colorbar_tickcolor=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickfont": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_family=<VALUE>, selector=dict(type='scatter3d'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scatter3d'))" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_size=<VALUE>, selector=dict(type='scatter3d'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_style=<VALUE>, selector=dict(type='scatter3d'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scatter3d'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scatter3d'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(line_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(line_colorbar_tickfont=dict(...), selector=dict(type='scatter3d'))" }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_tickformat=<VALUE>, selector=dict(type='scatter3d'))" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(line_colorbar_tickformatstops=list(...), selector=dict(type='scatter3d'))" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" ], - "flags": [ - "under", - "over", - "through" + "magic_underscores": "fig.update_traces(line_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scatter3d'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scatter3d'))" }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(line_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scatter3d'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_ticklen=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(line_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(line_colorbar_tickmode=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_tickprefix=<VALUE>, selector=dict(type='scatter3d'))" }, - "size": { - "editType": "colorbars", - "min": 1, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(line_colorbar_ticks=<VALUE>, selector=dict(type='scatter3d'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_ticksuffix=<VALUE>, selector=dict(type='scatter3d'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(line_colorbar_ticktext=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(line_colorbar_tickvals=<VALUE>, selector=dict(type='scatter3d'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_tickwidth=<VALUE>, selector=dict(type='scatter3d'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_family=<VALUE>, selector=dict(type='scatter3d'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_size=<VALUE>, selector=dict(type='scatter3d'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(line_colorbar_title_font_style=<VALUE>, selector=dict(type='scatter3d'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(line_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(line_colorbar_title_font_variant=<VALUE>, selector=dict(type='scatter3d'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(line_colorbar_title_font_weight=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(line_colorbar_title_font=dict(...), selector=dict(type='scatter3d'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(line_colorbar_title_side=<VALUE>, selector=dict(type='scatter3d'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(line_colorbar_title_text=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(line_colorbar_title=dict(...), selector=dict(type='scatter3d'))" + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_x=<VALUE>, selector=dict(type='scatter3d'))" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "left", + "center", + "right" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_xanchor=<VALUE>, selector=dict(type='scatter3d'))" }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_xpad=<VALUE>, selector=dict(type='scatter3d'))" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_xref=<VALUE>, selector=dict(type='scatter3d'))" }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_y=<VALUE>, selector=dict(type='scatter3d'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "top", + "middle", + "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_yanchor=<VALUE>, selector=dict(type='scatter3d'))" }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_colorbar_ypad=<VALUE>, selector=dict(type='scatter3d'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar_yref=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(line_colorbar=dict(...), selector=dict(type='scatter3d'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(line_colorscale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "dash": { + "description": "Sets the dash style of the lines.", + "dflt": "solid", + "editType": "calc", + "valType": "enumerated", + "values": [ + "dash", + "dashdot", + "dot", + "longdash", + "longdashdot", + "solid" + ], + "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `line.color` is set to a numerical array. If true, `line.cmin` will correspond to the last color in the array and `line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(line_reversescale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `line.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(line_showscale=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scatter3d'))" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='streamtube'))" + "role": "object", + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", "valType": "enumerated", "values": [ - "allow", - "hide past div", - "hide past domain" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", "valType": "enumerated", "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" + "normal", + "small-caps" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatter3d'))" + }, + "error_x": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_x_array=<VALUE>, selector=dict(type='scatter3d'))" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_x_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(error_x_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "copy_zstyle": { + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_copy_zstyle=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_symmetric=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_x_thickness=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='streamtube'))" + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_x_traceref=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='streamtube'))" + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_x_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", "valType": "enumerated", "values": [ - "outside", - "inside", - "" + "percent", + "constant", + "sqrt", + "data" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_x_type=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='streamtube'))" + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_value=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='streamtube'))" + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_valueminus=<VALUE>, selector=dict(type='scatter3d'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_x_visible=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_x_width=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(error_x=dict(...), selector=dict(type='scatter3d'))" + }, + "error_y": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_y_array=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_y_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(error_y_color=<VALUE>, selector=dict(type='scatter3d'))" + }, + "copy_zstyle": { + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_y_copy_zstyle=<VALUE>, selector=dict(type='scatter3d'))" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_y_symmetric=<VALUE>, selector=dict(type='scatter3d'))" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_y_thickness=<VALUE>, selector=dict(type='scatter3d'))" }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='streamtube'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='streamtube'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='streamtube'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='streamtube'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='streamtube'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='streamtube'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='streamtube'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='streamtube'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='streamtube'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='streamtube'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='streamtube'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='streamtube'))" + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_y_traceref=<VALUE>, selector=dict(type='scatter3d'))" }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_y_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ], + "magic_underscores": "fig.update_traces(error_y_type=<VALUE>, selector=dict(type='scatter3d'))" + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_y_value=<VALUE>, selector=dict(type='scatter3d'))" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_valueminus=<VALUE>, selector=dict(type='scatter3d'))" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_y_visible=<VALUE>, selector=dict(type='scatter3d'))" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_y_width=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(error_y=dict(...), selector=dict(type='scatter3d'))" + }, + "error_z": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_z_array=<VALUE>, selector=dict(type='scatter3d'))" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(error_z_arrayminus=<VALUE>, selector=dict(type='scatter3d'))" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(error_z_color=<VALUE>, selector=dict(type='scatter3d'))" }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='streamtube'))" + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_z_symmetric=<VALUE>, selector=dict(type='scatter3d'))" }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_z_thickness=<VALUE>, selector=dict(type='scatter3d'))" }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='streamtube'))" + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_z_traceref=<VALUE>, selector=dict(type='scatter3d'))" }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='streamtube'))" + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(error_z_tracerefminus=<VALUE>, selector=dict(type='scatter3d'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", "valType": "enumerated", "values": [ - "top", - "middle", - "bottom" + "percent", + "constant", + "sqrt", + "data" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_z_type=<VALUE>, selector=dict(type='scatter3d'))" }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", "dflt": 10, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_z_value=<VALUE>, selector=dict(type='scatter3d'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='streamtube'))" + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_z_valueminus=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='streamtube'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(error_z_visible=<VALUE>, selector=dict(type='scatter3d'))" }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='streamtube'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(error_z_width=<VALUE>, selector=dict(type='scatter3d'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='streamtube'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='streamtube'))" - }, - "reversescale": { - "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(error_z=dict(...), selector=dict(type='scatter3d'))" }, "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", "dflt": "", - "editType": "none", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='scatter3d'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", - "dflt": true, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" - }, "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='streamtube'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='streamtube'))" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v/w norm. Has no effect when `cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='streamtube'))" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scatter3d'))" }, "hoverlabel": { "align": { @@ -60795,36 +50709,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='streamtube'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatter3d'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='streamtube'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatter3d'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='streamtube'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatter3d'))" }, "editType": "none", "font": { @@ -60832,12 +50731,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='streamtube'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatter3d'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -60848,12 +50742,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='streamtube'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatter3d'))" }, "lineposition": { "arrayOk": true, @@ -60869,12 +50758,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatter3d'))" }, "role": "object", "shadow": { @@ -60883,24 +50767,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='streamtube'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatter3d'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='streamtube'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatter3d'))" }, "style": { "arrayOk": true, @@ -60912,12 +50786,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='streamtube'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatter3d'))" }, "textcase": { "arrayOk": true, @@ -60931,12 +50800,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='streamtube'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatter3d'))" }, "variant": { "arrayOk": true, @@ -60952,12 +50816,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='streamtube'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatter3d'))" }, "weight": { "arrayOk": true, @@ -60971,14 +50830,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='streamtube'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatter3d'))" }, "namelength": { "arrayOk": true, @@ -60987,12 +50841,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='streamtube'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatter3d'))" }, "role": "object", "showarrow": { @@ -61000,218 +50849,228 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='streamtube'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='streamtube'))" - }, - "lighting": { - "ambient": { - "description": "Ambient light increases overall color visibility but can wash out the image.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='streamtube'))" - }, - "diffuse": { - "description": "Represents the extent that incident rays are reflected in a range of angles.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='streamtube'))" - }, - "editType": "calc", - "facenormalsepsilon": { - "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-06, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='streamtube'))" - }, - "fresnel": { - "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", - "dflt": 0.2, - "editType": "calc", - "max": 5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='streamtube'))" - }, - "role": "object", - "roughness": { - "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='streamtube'))" - }, - "specular": { - "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", - "dflt": 0.05, - "editType": "calc", - "max": 2, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='streamtube'))" - }, - "vertexnormalsepsilon": { - "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-12, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scatter3d'))" }, - "lightposition": { + "projection": { "editType": "calc", "role": "object", "x": { - "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 100000, "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='streamtube'))" + "opacity": { + "description": "Sets the projection color.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_x_opacity=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, + "editType": "calc", + "max": 10, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_x_scale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "show": { + "description": "Sets whether or not projections are shown along the x axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(projection_x_show=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(projection_x=dict(...), selector=dict(type='scatter3d'))" }, "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 100000, "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='streamtube'))" + "opacity": { + "description": "Sets the projection color.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_y_opacity=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, + "editType": "calc", + "max": 10, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_y_scale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "show": { + "description": "Sets whether or not projections are shown along the y axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(projection_y_show=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(projection_y=dict(...), selector=dict(type='scatter3d'))" }, "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='streamtube'))" + "opacity": { + "description": "Sets the projection color.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_z_opacity=<VALUE>, selector=dict(type='scatter3d'))" + }, + "role": "object", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, + "editType": "calc", + "max": 10, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(projection_z_scale=<VALUE>, selector=dict(type='scatter3d'))" + }, + "show": { + "description": "Sets whether or not projections are shown along the z axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(projection_z_show=<VALUE>, selector=dict(type='scatter3d'))" + }, + "magic_underscores": "fig.update_traces(projection_z=dict(...), selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(projection=dict(...), selector=dict(type='scatter3d'))" }, - "maxdisplayed": { - "description": "The maximum number of displayed segments in a streamtube.", - "dflt": 1000, + "surfaceaxis": { + "description": "If *-1*, the scatter points are not fill with a surface If *0*, *1*, *2*, the scatter points are filled with a Delaunay surface about the x, y, z respectively.", + "dflt": -1, "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(maxdisplayed=<VALUE>, selector=dict(type='streamtube'))" + "valType": "enumerated", + "values": [ + -1, + 0, + 1, + 2 + ], + "magic_underscores": "fig.update_traces(surfaceaxis=<VALUE>, selector=dict(type='scatter3d'))" }, - "sizeref": { - "description": "The scaling factor for the streamtubes. The default is 1, which avoids two max divergence tubes from touching at adjacent starting positions.", - "dflt": 1, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(sizeref=<VALUE>, selector=dict(type='streamtube'))" + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='scatter3d'))" }, - "starts": { + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", "editType": "calc", - "role": "object", - "x": { - "description": "Sets the x components of the starting position of the streamtubes", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(starts_x=<VALUE>, selector=dict(type='streamtube'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the y components of the starting position of the streamtubes", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(starts_y=<VALUE>, selector=dict(type='streamtube'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the z components of the starting position of the streamtubes", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(starts_z=<VALUE>, selector=dict(type='streamtube'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(starts=dict(...), selector=dict(type='streamtube'))" + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='scatter3d'))" + }, + "zcalendar": { + "description": "Sets the calendar system to use with `z` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='scatter3d'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='streamtube'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='streamtube'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='streamtube'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatter3d'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='streamtube'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='scatter3d'))" }, "categories": [ "gl3d", - "showLegend" + "symbols", + "showLegend", + "scatter-like" ], "meta": { - "description": "Use a streamtube trace to visualize flow in a vector field. Specify a vector field using 6 1D arrays of equal length, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, and `w`. By default, the tubes' starting positions will be cut from the vector field's x-z plane at its minimum y value. To specify your own starting position, use attributes `starts.x`, `starts.y` and `starts.z`. The color is encoded by the norm of (u, v, w), and the local radius by the divergence of (u, v, w)." + "description": "The data visualized as scatter point or lines in 3D dimension is set in `x`, `y`, `z`. Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` Projections are achieved via `projection`. Surface fills are achieved via `surfaceaxis`.", + "hrName": "scatter_3d" }, - "type": "streamtube" + "type": "scatter3d" }, - "volume": { + "surface": { "animatable": false, "attributes": { - "type": "volume", + "type": "surface", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='surface'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='surface'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -61223,35 +51082,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='surface'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='surface'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='surface'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='surface'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='surface'))" }, "legendgrouptitle": { "editType": "style", @@ -61259,7 +51118,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='surface'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -61269,7 +51128,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='surface'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -61284,7 +51143,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "shadow": { @@ -61292,13 +51151,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='surface'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='surface'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -61309,7 +51168,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='surface'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -61322,7 +51181,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='surface'))" }, "variant": { "description": "Sets the variant of the font.", @@ -61337,7 +51196,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='surface'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -61350,9 +51209,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='surface'))" }, "role": "object", "text": { @@ -61360,16 +51219,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='surface'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='surface'))" }, "opacity": { "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", @@ -61378,75 +51237,45 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='surface'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='volume'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='surface'))" }, "x": { - "description": "Sets the X coordinates of the vertices on X axis.", + "description": "Sets the x coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='volume'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='surface'))" }, "y": { - "description": "Sets the Y coordinates of the vertices on Y axis.", + "description": "Sets the y coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='volume'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='surface'))" }, "z": { - "description": "Sets the Z coordinates of the vertices on Z axis.", + "description": "Sets the z coordinates.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='volume'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='surface'))" }, - "value": { - "description": "Sets the 4th dimension (value) of the vertices.", - "editType": "calc+clearAxisTypes", + "surfacecolor": { + "description": "Sets the surface color values, used for setting a color scale independent of `z`.", + "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='volume'))" - }, - "valuesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `value`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(surfacecolor=<VALUE>, selector=dict(type='surface'))" }, "text": { "arrayOk": true, - "description": "Sets the text elements associated with the vertices. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets the text elements associated with each z value. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='volume'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='surface'))" }, "hovertext": { "arrayOk": true, @@ -61454,16 +51283,11 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='volume'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='surface'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -61479,12 +51303,7 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='volume'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='surface'))" }, "hovertemplate": { "arrayOk": true, @@ -61492,70 +51311,48 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='surface'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='volume'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='surface'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='surface'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='volume'))" - }, - "valuehoverformat": { - "description": "Sets the hover text formatting rulefor `value` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(valuehoverformat=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='surface'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='volume'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='surface'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='volume'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='surface'))" }, "scene": { "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", "dflt": "scene", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='surface'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -61563,7 +51360,7 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='surface'))" }, "colorbar": { "bgcolor": { @@ -61571,14 +51368,14 @@ "dflt": "rgba(0,0,0,0)", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='surface'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='surface'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", @@ -61586,17 +51383,17 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='surface'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='surface'))" }, "editType": "calc", "exponentformat": { @@ -61613,14 +51410,14 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='surface'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='surface'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", @@ -61628,7 +51425,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='surface'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", @@ -61639,7 +51436,7 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='surface'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", @@ -61647,7 +51444,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='surface'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", @@ -61655,7 +51452,7 @@ "editType": "calc", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='surface'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", @@ -61666,14 +51463,14 @@ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='surface'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='surface'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", @@ -61681,7 +51478,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "separatethousands": { @@ -61689,7 +51486,7 @@ "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='surface'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", @@ -61702,14 +51499,14 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='surface'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='surface'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", @@ -61722,7 +51519,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='surface'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", @@ -61735,7 +51532,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='surface'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", @@ -61743,7 +51540,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='surface'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", @@ -61754,37 +51551,37 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='surface'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='surface'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", "editType": "calc", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='surface'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='surface'))" }, "tickfont": { "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='surface'))" }, "description": "Sets the color bar's tick label font", "editType": "calc", @@ -61794,7 +51591,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='surface'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -61809,7 +51606,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "shadow": { @@ -61817,13 +51614,13 @@ "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='surface'))" }, "size": { "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='surface'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -61834,7 +51631,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='surface'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -61847,7 +51644,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='surface'))" }, "variant": { "description": "Sets the variant of the font.", @@ -61862,7 +51659,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='surface'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -61875,16 +51672,16 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='surface'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='surface'))" }, "tickformatstops": { "items": { @@ -61931,7 +51728,7 @@ } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='surface'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", @@ -61942,7 +51739,7 @@ "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='surface'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", @@ -61961,7 +51758,7 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='surface'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", @@ -61969,7 +51766,7 @@ "editType": "calc", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='surface'))" }, "ticklen": { "description": "Sets the tick length (in px).", @@ -61977,13 +51774,13 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='surface'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "enumerated", "values": [ @@ -61991,14 +51788,14 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='surface'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='surface'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", @@ -62010,36 +51807,26 @@ "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='surface'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='surface'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='volume'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='surface'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='volume'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='surface'))" }, "tickwidth": { "description": "Sets the tick width (in px).", @@ -62047,7 +51834,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='surface'))" }, "title": { "editType": "calc", @@ -62055,7 +51842,7 @@ "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='surface'))" }, "description": "Sets this color bar's title font.", "editType": "calc", @@ -62065,7 +51852,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='surface'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -62080,7 +51867,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "shadow": { @@ -62088,13 +51875,13 @@ "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='surface'))" }, "size": { "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='surface'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -62105,7 +51892,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='surface'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -62118,7 +51905,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='surface'))" }, "variant": { "description": "Sets the variant of the font.", @@ -62133,7 +51920,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='surface'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -62146,13 +51933,13 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='surface'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "calc", "valType": "enumerated", "values": [ @@ -62160,21 +51947,21 @@ "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='surface'))" }, "text": { "description": "Sets the title of the color bar.", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='surface'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='surface'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", @@ -62185,7 +51972,7 @@ "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='surface'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", @@ -62193,7 +51980,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='surface'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", @@ -62204,13 +51991,13 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='surface'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='surface'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", @@ -62221,7 +52008,7 @@ "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='surface'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", @@ -62229,7 +52016,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='surface'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", @@ -62240,196 +52027,430 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='surface'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, + "dflt": false, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='surface'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='surface'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='surface'))" }, "reversescale": { "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='surface'))" }, "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='surface'))" }, "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here `value`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "description": "Determines whether or not the color domain is computed with respect to the input data (here z or surfacecolor) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='surface'))" }, "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as `value` and if set, `cmin` must be set as well.", + "description": "Sets the upper bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmin` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='surface'))" }, "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `value`. Has no effect when `cauto` is `false`.", + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as z or surfacecolor. Has no effect when `cauto` is `false`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='surface'))" }, "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as `value` and if set, `cmax` must be set as well.", + "description": "Sets the lower bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmax` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='surface'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='surface'))" }, - "caps": { + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data are filled in.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='surface'))" + }, + "contours": { "editType": "calc", "role": "object", "x": { + "color": { + "description": "Sets the color of the contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contours_x_color=<VALUE>, selector=dict(type='surface'))" + }, "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, + "end": { + "description": "Sets the end contour level value. Must be more than `contours.start`", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_x_end=<VALUE>, selector=dict(type='surface'))" + }, + "highlight": { + "description": "Determines whether or not contour lines about the x dimension are highlighted on hover.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_highlight=<VALUE>, selector=dict(type='surface'))" + }, + "highlightcolor": { + "description": "Sets the color of the highlighted contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contours_x_highlightcolor=<VALUE>, selector=dict(type='surface'))" + }, + "highlightwidth": { + "description": "Sets the width of the highlighted contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_x_highlightwidth=<VALUE>, selector=dict(type='surface'))" + }, + "project": { + "editType": "calc", + "role": "object", + "x": { + "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_project_x=<VALUE>, selector=dict(type='surface'))" + }, + "y": { + "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_project_y=<VALUE>, selector=dict(type='surface'))" + }, + "z": { + "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_project_z=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_x_project=dict(...), selector=dict(type='surface'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not contour lines about the x dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_show=<VALUE>, selector=dict(type='surface'))" + }, + "size": { + "description": "Sets the step between each contour level. Must be positive.", + "dflt": null, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_x_size=<VALUE>, selector=dict(type='surface'))" + }, + "start": { + "description": "Sets the starting contour level value. Must be less than `contours.end`", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_x_start=<VALUE>, selector=dict(type='surface'))" + }, + "usecolormap": { + "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_x_usecolormap=<VALUE>, selector=dict(type='surface'))" + }, + "width": { + "description": "Sets the width of the contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_x_width=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_x=dict(...), selector=dict(type='surface'))" + }, + "y": { + "color": { + "description": "Sets the color of the contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contours_y_color=<VALUE>, selector=dict(type='surface'))" + }, + "editType": "calc", + "end": { + "description": "Sets the end contour level value. Must be more than `contours.start`", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_y_end=<VALUE>, selector=dict(type='surface'))" + }, + "highlight": { + "description": "Determines whether or not contour lines about the y dimension are highlighted on hover.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_y_highlight=<VALUE>, selector=dict(type='surface'))" + }, + "highlightcolor": { + "description": "Sets the color of the highlighted contour lines.", + "dflt": "#444", "editType": "calc", - "max": 1, - "min": 0, + "valType": "color", + "magic_underscores": "fig.update_traces(contours_y_highlightcolor=<VALUE>, selector=dict(type='surface'))" + }, + "highlightwidth": { + "description": "Sets the width of the highlighted contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(caps_x_fill=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_y_highlightwidth=<VALUE>, selector=dict(type='surface'))" + }, + "project": { + "editType": "calc", + "role": "object", + "x": { + "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_y_project_x=<VALUE>, selector=dict(type='surface'))" + }, + "y": { + "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_y_project_y=<VALUE>, selector=dict(type='surface'))" + }, + "z": { + "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_y_project_z=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_y_project=dict(...), selector=dict(type='surface'))" }, "role": "object", "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the x `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, + "description": "Determines whether or not contour lines about the y dimension are drawn.", + "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_x_show=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_y_show=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(caps_x=dict(...), selector=dict(type='volume'))" - }, - "y": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, + "size": { + "description": "Sets the step between each contour level. Must be positive.", + "dflt": null, "editType": "calc", - "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(caps_y_fill=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_y_size=<VALUE>, selector=dict(type='surface'))" }, - "role": "object", - "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the y `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, + "start": { + "description": "Sets the starting contour level value. Must be less than `contours.end`", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_y_start=<VALUE>, selector=dict(type='surface'))" + }, + "usecolormap": { + "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", + "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_y_show=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_y_usecolormap=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(caps_y=dict(...), selector=dict(type='volume'))" + "width": { + "description": "Sets the width of the contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_y_width=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_y=dict(...), selector=dict(type='surface'))" }, "z": { + "color": { + "description": "Sets the color of the contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contours_z_color=<VALUE>, selector=dict(type='surface'))" + }, "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, + "end": { + "description": "Sets the end contour level value. Must be more than `contours.start`", + "dflt": null, "editType": "calc", - "max": 1, - "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(caps_z_fill=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_z_end=<VALUE>, selector=dict(type='surface'))" + }, + "highlight": { + "description": "Determines whether or not contour lines about the z dimension are highlighted on hover.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_z_highlight=<VALUE>, selector=dict(type='surface'))" + }, + "highlightcolor": { + "description": "Sets the color of the highlighted contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contours_z_highlightcolor=<VALUE>, selector=dict(type='surface'))" + }, + "highlightwidth": { + "description": "Sets the width of the highlighted contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_z_highlightwidth=<VALUE>, selector=dict(type='surface'))" + }, + "project": { + "editType": "calc", + "role": "object", + "x": { + "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_z_project_x=<VALUE>, selector=dict(type='surface'))" + }, + "y": { + "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_z_project_y=<VALUE>, selector=dict(type='surface'))" + }, + "z": { + "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_z_project_z=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_z_project=dict(...), selector=dict(type='surface'))" }, "role": "object", "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the z `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, + "description": "Determines whether or not contour lines about the z dimension are drawn.", + "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_z_show=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours_z_show=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(caps_z=dict(...), selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(caps=dict(...), selector=dict(type='volume'))" - }, - "contour": { - "color": { - "description": "Sets the color of the contour lines.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='volume'))" - }, - "editType": "calc", - "role": "object", - "show": { - "description": "Sets whether or not dynamic contours are shown on hover", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='volume'))" - }, - "width": { - "description": "Sets the width of the contour lines.", - "dflt": 2, - "editType": "calc", - "max": 16, - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='volume'))" + "size": { + "description": "Sets the step between each contour level. Must be positive.", + "dflt": null, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_z_size=<VALUE>, selector=dict(type='surface'))" + }, + "start": { + "description": "Sets the starting contour level value. Must be less than `contours.end`", + "dflt": null, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(contours_z_start=<VALUE>, selector=dict(type='surface'))" + }, + "usecolormap": { + "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contours_z_usecolormap=<VALUE>, selector=dict(type='surface'))" + }, + "width": { + "description": "Sets the width of the contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contours_z_width=<VALUE>, selector=dict(type='surface'))" + }, + "magic_underscores": "fig.update_traces(contours_z=dict(...), selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(contours=dict(...), selector=dict(type='surface'))" }, - "flatshading": { - "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections.", - "dflt": true, + "hidesurface": { + "description": "Determines whether or not a surface is drawn. For example, set `hidesurface` to *false* `contours.x.show` to *true* and `contours.y.show` to *true* to draw a wire frame plot.", + "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(hidesurface=<VALUE>, selector=dict(type='surface'))" }, "hoverlabel": { "align": { @@ -62443,36 +52464,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='volume'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='surface'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='volume'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='surface'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='volume'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='surface'))" }, "editType": "none", "font": { @@ -62480,12 +52486,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='volume'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='surface'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -62496,12 +52497,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='volume'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='surface'))" }, "lineposition": { "arrayOk": true, @@ -62517,12 +52513,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='volume'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "shadow": { @@ -62531,24 +52522,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='volume'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='surface'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='volume'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='surface'))" }, "style": { "arrayOk": true, @@ -62560,12 +52541,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='volume'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='surface'))" }, "textcase": { "arrayOk": true, @@ -62579,12 +52555,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='volume'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='surface'))" }, "variant": { "arrayOk": true, @@ -62600,12 +52571,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='volume'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='surface'))" }, "weight": { "arrayOk": true, @@ -62619,14 +52585,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='volume'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='surface'))" }, "namelength": { "arrayOk": true, @@ -62635,12 +52596,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='volume'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "showarrow": { @@ -62648,21 +52604,9 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='volume'))" - }, - "isomax": { - "description": "Sets the maximum boundary for iso-surface plot.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(isomax=<VALUE>, selector=dict(type='volume'))" - }, - "isomin": { - "description": "Sets the minimum boundary for iso-surface plot.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(isomin=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='surface'))" }, "lighting": { "ambient": { @@ -62672,7 +52616,7 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='surface'))" }, "diffuse": { "description": "Represents the extent that incident rays are reflected in a range of angles.", @@ -62681,18 +52625,9 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='surface'))" }, "editType": "calc", - "facenormalsepsilon": { - "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='volume'))" - }, "fresnel": { "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", "dflt": 0.2, @@ -62700,7 +52635,7 @@ "max": 5, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='surface'))" }, "role": "object", "roughness": { @@ -62710,7 +52645,7 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='surface'))" }, "specular": { "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", @@ -62719,284 +52654,156 @@ "max": 2, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='volume'))" - }, - "vertexnormalsepsilon": { - "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-12, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='surface'))" }, "lightposition": { "editType": "calc", "role": "object", "x": { "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='volume'))" - }, - "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='volume'))" - }, - "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, + "dflt": 10, "editType": "calc", "max": 100000, "min": -100000, "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='volume'))" - }, - "opacityscale": { - "description": "Sets the opacityscale. The opacityscale must be an array containing arrays mapping a normalized value to an opacity value. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 1], [0.5, 0.2], [1, 1]]` means that higher/lower values would have higher opacity values and those in the middle would be more transparent Alternatively, `opacityscale` may be a palette name string of the following list: 'min', 'max', 'extremes' and 'uniform'. The default is 'uniform'.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(opacityscale=<VALUE>, selector=dict(type='volume'))" - }, - "slices": { - "editType": "calc", - "role": "object", - "x": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_x_fill=<VALUE>, selector=dict(type='volume'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis x except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_x_locations=<VALUE>, selector=dict(type='volume'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the x dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_x_show=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(slices_x=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='surface'))" }, "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 10000, "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_y_fill=<VALUE>, selector=dict(type='volume'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis y except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_y_locations=<VALUE>, selector=dict(type='volume'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the y dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_y_show=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(slices_y=dict(...), selector=dict(type='volume'))" - }, - "z": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_z_fill=<VALUE>, selector=dict(type='volume'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis z except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_z_locations=<VALUE>, selector=dict(type='volume'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the z dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_z_show=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(slices_z=dict(...), selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(slices=dict(...), selector=dict(type='volume'))" - }, - "spaceframe": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `spaceframe` elements. The default fill value is 1 meaning that they are entirely shaded. Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(spaceframe_fill=<VALUE>, selector=dict(type='volume'))" - }, - "role": "object", - "show": { - "description": "Displays/hides tetrahedron shapes between minimum and maximum iso-values. Often useful when either caps or surfaces are disabled or filled with values less than 1.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(spaceframe_show=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(spaceframe=dict(...), selector=dict(type='volume'))" - }, - "surface": { - "count": { - "description": "Sets the number of iso-surfaces between minimum and maximum iso-values. By default this value is 2 meaning that only minimum and maximum surfaces would be drawn.", - "dflt": 2, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(surface_count=<VALUE>, selector=dict(type='volume'))" - }, - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the iso-surface. The default fill value of the surface is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(surface_fill=<VALUE>, selector=dict(type='volume'))" - }, - "pattern": { - "description": "Sets the surface pattern of the iso-surface 3-D sections. The default pattern of the surface is `all` meaning that the rest of surface elements would be shaded. The check options (either 1 or 2) could be used to draw half of the squares on the surface. Using various combinations of capital `A`, `B`, `C`, `D` and `E` may also be used to reduce the number of triangles on the iso-surfaces and creating other patterns of interest.", - "dflt": "all", - "editType": "calc", - "extras": [ - "all", - "odd", - "even" - ], - "flags": [ - "A", - "B", - "C", - "D", - "E" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(surface_pattern=<VALUE>, selector=dict(type='volume'))" + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='surface'))" }, - "role": "object", - "show": { - "description": "Hides/displays surfaces between minimum and maximum iso-values.", - "dflt": true, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(surface_show=<VALUE>, selector=dict(type='volume'))" + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(surface=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='surface'))" + }, + "opacityscale": { + "description": "Sets the opacityscale. The opacityscale must be an array containing arrays mapping a normalized value to an opacity value. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 1], [0.5, 0.2], [1, 1]]` means that higher/lower values would have higher opacity values and those in the middle would be more transparent Alternatively, `opacityscale` may be a palette name string of the following list: 'min', 'max', 'extremes' and 'uniform'. The default is 'uniform'.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(opacityscale=<VALUE>, selector=dict(type='surface'))" + }, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='surface'))" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='surface'))" + }, + "zcalendar": { + "description": "Sets the calendar system to use with `z` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='surface'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='volume'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='volume'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='volume'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='surface'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='volume'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='surface'))" }, "categories": [ "gl3d", + "2dMap", "showLegend" ], "meta": { - "description": "Draws volume trace between iso-min and iso-max values with coordinates given by four 1-dimensional arrays containing the `value`, `x`, `y` and `z` of every vertex of a uniform or non-uniform 3-D grid. Horizontal or vertical slices, caps as well as spaceframe between iso-min and iso-max values could also be drawn using this trace." + "description": "The data the describes the coordinates of the surface is set in `z`. Data in `z` should be a {2D array}. Coordinates in `x` and `y` can either be 1D {arrays} or {2D arrays} (e.g. to graph parametric surfaces). If not provided in `x` and `y`, the x and y coordinates are assumed to be linear starting at 0 with a unit step. The color scale corresponds to the `z` values by default. For custom color scales, use `surfacecolor` which should be a {2D array}, where its bounds can be controlled using `cmin` and `cmax`." }, - "type": "volume" + "type": "surface" }, - "isosurface": { + "mesh3d": { "animatable": false, "attributes": { - "type": "isosurface", + "type": "mesh3d", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='mesh3d'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='mesh3d'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -63008,35 +52815,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='mesh3d'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, - "editType": "calc", + "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='mesh3d'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='mesh3d'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='mesh3d'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='mesh3d'))" }, "legendgrouptitle": { "editType": "style", @@ -63044,7 +52851,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='mesh3d'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -63054,7 +52861,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='mesh3d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -63069,7 +52876,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "shadow": { @@ -63077,13 +52884,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='mesh3d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -63094,7 +52901,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='mesh3d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -63107,7 +52914,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" }, "variant": { "description": "Sets the variant of the font.", @@ -63122,7 +52929,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='mesh3d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -63135,9 +52942,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='mesh3d'))" }, "role": "object", "text": { @@ -63145,16 +52952,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='mesh3d'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='mesh3d'))" }, "opacity": { "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", @@ -63163,62 +52970,78 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='mesh3d'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='isosurface'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='mesh3d'))" }, "x": { - "description": "Sets the X coordinates of the vertices on X axis.", + "description": "Sets the X coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='isosurface'))" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='mesh3d'))" }, "y": { - "description": "Sets the Y coordinates of the vertices on Y axis.", + "description": "Sets the Y coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='isosurface'))" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='mesh3d'))" }, "z": { - "description": "Sets the Z coordinates of the vertices on Z axis.", + "description": "Sets the Z coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.", "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='mesh3d'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" + "i": { + "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *first* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `i[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `i` represents a point in space, which is the first vertex of a triangle.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(i=<VALUE>, selector=dict(type='mesh3d'))" }, - "value": { - "description": "Sets the 4th dimension (value) of the vertices.", - "editType": "calc+clearAxisTypes", + "j": { + "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *second* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `j[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `j` represents a point in space, which is the second vertex of a triangle.", + "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(j=<VALUE>, selector=dict(type='mesh3d'))" }, - "valuesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `value`.", - "editType": "none", - "valType": "string" + "k": { + "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *third* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `k[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `k` represents a point in space, which is the third vertex of a triangle.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(k=<VALUE>, selector=dict(type='mesh3d'))" + }, + "facecolor": { + "description": "Sets the color of each face Overrides *color* and *vertexcolor*.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(facecolor=<VALUE>, selector=dict(type='mesh3d'))" + }, + "intensity": { + "description": "Sets the intensity values for vertices or cells as defined by `intensitymode`. It can be used for plotting fields on meshes.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(intensity=<VALUE>, selector=dict(type='mesh3d'))" + }, + "intensitymode": { + "description": "Determines the source of `intensity` values.", + "dflt": "vertex", + "editType": "calc", + "valType": "enumerated", + "values": [ + "vertex", + "cell" + ], + "magic_underscores": "fig.update_traces(intensitymode=<VALUE>, selector=dict(type='mesh3d'))" + }, + "vertexcolor": { + "description": "Sets the color of each vertex Overrides *color*. While Red, green and blue colors are in the range of 0 and 255; in the case of having vertex color data in RGBA format, the alpha color should be normalized to be between 0 and 1.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(vertexcolor=<VALUE>, selector=dict(type='mesh3d'))" }, "text": { "arrayOk": true, @@ -63226,12 +53049,7 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='isosurface'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='mesh3d'))" }, "hovertext": { "arrayOk": true, @@ -63239,16 +53057,11 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='isosurface'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='mesh3d'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -63264,12 +53077,7 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='isosurface'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='mesh3d'))" }, "hovertemplate": { "arrayOk": true, @@ -63277,70 +53085,48 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='mesh3d'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='isosurface'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='mesh3d'))" }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='mesh3d'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='isosurface'))" - }, - "valuehoverformat": { - "description": "Sets the hover text formatting rulefor `value` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(valuehoverformat=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='mesh3d'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='isosurface'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='mesh3d'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='isosurface'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='mesh3d'))" }, "scene": { "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", "dflt": "scene", "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='mesh3d'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -63348,46 +53134,52 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='mesh3d'))" + }, + "color": { + "description": "Sets the color of the whole mesh", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(color=<VALUE>, selector=dict(type='mesh3d'))" }, "colorbar": { "bgcolor": { "description": "Sets the color of padded area.", "dflt": "rgba(0,0,0,0)", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='mesh3d'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='mesh3d'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='mesh3d'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='mesh3d'))" }, - "editType": "calc", + "editType": "colorbars", "exponentformat": { "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", "dflt": "B", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "none", @@ -63398,88 +53190,88 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='mesh3d'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='mesh3d'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='mesh3d'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", "dflt": "fraction", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='mesh3d'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", "dflt": 3, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='mesh3d'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='mesh3d'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", "dflt": "v", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='mesh3d'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='mesh3d'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "separatethousands": { "description": "If \"true\", even 4-digit integers are separated", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='mesh3d'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -63487,19 +53279,19 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='mesh3d'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='mesh3d'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -63507,12 +53299,12 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='mesh3d'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -63520,71 +53312,71 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='mesh3d'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", "dflt": 30, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='mesh3d'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", "dflt": "pixels", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='mesh3d'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='mesh3d'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", - "editType": "calc", + "editType": "colorbars", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='mesh3d'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='mesh3d'))" }, "tickfont": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='mesh3d'))" }, "description": "Sets the color bar's tick label font", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='mesh3d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -63594,37 +53386,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='mesh3d'))" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='mesh3d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='mesh3d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -63632,12 +53424,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='mesh3d'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -63647,12 +53439,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='mesh3d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -63660,79 +53452,79 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='mesh3d'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='mesh3d'))" }, "tickformatstops": { "items": { "tickformatstop": { "dtickrange": { "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", + "editType": "colorbars", "items": [ { - "editType": "calc", + "editType": "colorbars", "valType": "any" }, { - "editType": "calc", + "editType": "colorbars", "valType": "any" } ], "valType": "info_array" }, - "editType": "calc", + "editType": "colorbars", "enabled": { "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean" }, "name": { "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "role": "object", "templateitemname": { "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "value": { "description": "string - dtickformat for described zoom level, the same as *tickformat*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" } } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='mesh3d'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "allow", "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='mesh3d'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", "dflt": "outside", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", @@ -63746,29 +53538,29 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='mesh3d'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='mesh3d'))" }, "ticklen": { "description": "Sets the tick length (in px).", "dflt": 5, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='mesh3d'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "enumerated", "values": [ @@ -63776,86 +53568,76 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='mesh3d'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='mesh3d'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='mesh3d'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='mesh3d'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='isosurface'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='mesh3d'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", + "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='isosurface'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='mesh3d'))" }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='mesh3d'))" }, "title": { - "editType": "calc", + "editType": "colorbars", "font": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='mesh3d'))" }, "description": "Sets this color bar's title font.", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='mesh3d'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -63865,37 +53647,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='mesh3d'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='mesh3d'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -63903,12 +53685,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -63918,12 +53700,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='mesh3d'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -63931,255 +53713,206 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='mesh3d'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ "right", "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='mesh3d'))" }, "text": { "description": "Sets the title of the color bar.", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='mesh3d'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", + "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='mesh3d'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "left", "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='mesh3d'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", "dflt": 10, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='mesh3d'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", "dflt": "paper", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='mesh3d'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", + "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='mesh3d'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "top", "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='mesh3d'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", "dflt": 10, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='mesh3d'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", "dflt": "paper", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='mesh3d'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='mesh3d'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='mesh3d'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='mesh3d'))" }, "reversescale": { "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", "dflt": false, - "editType": "calc", + "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='mesh3d'))" }, "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", "dflt": "", - "editType": "calc", + "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='mesh3d'))" }, "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here `value`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "description": "Determines whether or not the color domain is computed with respect to the input data (here `intensity`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='mesh3d'))" }, "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as `value` and if set, `cmin` must be set as well.", + "description": "Sets the upper bound of the color domain. Value should have the same units as `intensity` and if set, `cmin` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='mesh3d'))" }, "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `value`. Has no effect when `cauto` is `false`.", + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `intensity`. Has no effect when `cauto` is `false`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='mesh3d'))" }, "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as `value` and if set, `cmax` must be set as well.", + "description": "Sets the lower bound of the color domain. Value should have the same units as `intensity` and if set, `cmax` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='mesh3d'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='mesh3d'))" }, - "caps": { + "alphahull": { + "description": "Determines how the mesh surface triangles are derived from the set of vertices (points) represented by the `x`, `y` and `z` arrays, if the `i`, `j`, `k` arrays are not supplied. For general use of `mesh3d` it is preferred that `i`, `j`, `k` are supplied. If *-1*, Delaunay triangulation is used, which is mainly suitable if the mesh is a single, more or less layer surface that is perpendicular to `delaunayaxis`. In case the `delaunayaxis` intersects the mesh surface at more than one point it will result triangles that are very long in the dimension of `delaunayaxis`. If *>0*, the alpha-shape algorithm is used. In this case, the positive `alphahull` value signals the use of the alpha-shape algorithm, _and_ its value acts as the parameter for the mesh fitting. If *0*, the convex-hull algorithm is used. It is suitable for convex bodies or if the intention is to enclose the `x`, `y` and `z` point set into a convex hull.", + "dflt": -1, "editType": "calc", - "role": "object", - "x": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(caps_x_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "role": "object", - "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the x `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_x_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(caps_x=dict(...), selector=dict(type='isosurface'))" - }, - "y": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(caps_y_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "role": "object", - "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the y `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_y_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(caps_y=dict(...), selector=dict(type='isosurface'))" - }, - "z": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(caps_z_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "role": "object", - "show": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the z `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(caps_z_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(caps_z=dict(...), selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(caps=dict(...), selector=dict(type='isosurface'))" + "valType": "number", + "magic_underscores": "fig.update_traces(alphahull=<VALUE>, selector=dict(type='mesh3d'))" + }, + "delaunayaxis": { + "description": "Sets the Delaunay axis, which is the axis that is perpendicular to the surface of the Delaunay triangulation. It has an effect if `i`, `j`, `k` are not provided and `alphahull` is set to indicate Delaunay triangulation.", + "dflt": "z", + "editType": "calc", + "valType": "enumerated", + "values": [ + "x", + "y", + "z" + ], + "magic_underscores": "fig.update_traces(delaunayaxis=<VALUE>, selector=dict(type='mesh3d'))" }, "contour": { "color": { @@ -64187,7 +53920,7 @@ "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='mesh3d'))" }, "editType": "calc", "role": "object", @@ -64196,7 +53929,7 @@ "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='mesh3d'))" }, "width": { "description": "Sets the width of the contour lines.", @@ -64205,16 +53938,16 @@ "max": 16, "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='mesh3d'))" }, "flatshading": { "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections.", - "dflt": true, + "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='mesh3d'))" }, "hoverlabel": { "align": { @@ -64228,36 +53961,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='isosurface'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='mesh3d'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='isosurface'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='mesh3d'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='isosurface'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='mesh3d'))" }, "editType": "none", "font": { @@ -64265,12 +53983,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='isosurface'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='mesh3d'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -64281,12 +53994,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='isosurface'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='mesh3d'))" }, "lineposition": { "arrayOk": true, @@ -64302,12 +54010,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "shadow": { @@ -64316,24 +54019,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='isosurface'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='mesh3d'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='isosurface'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='mesh3d'))" }, "style": { "arrayOk": true, @@ -64345,12 +54038,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='isosurface'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='mesh3d'))" }, "textcase": { "arrayOk": true, @@ -64364,12 +54052,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='isosurface'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='mesh3d'))" }, "variant": { "arrayOk": true, @@ -64385,12 +54068,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='isosurface'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='mesh3d'))" }, "weight": { "arrayOk": true, @@ -64404,14 +54082,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='isosurface'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='mesh3d'))" }, "namelength": { "arrayOk": true, @@ -64420,362 +54093,225 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='isosurface'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", "dflt": true, - "editType": "none", - "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='isosurface'))" - }, - "isomax": { - "description": "Sets the maximum boundary for iso-surface plot.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(isomax=<VALUE>, selector=dict(type='isosurface'))" - }, - "isomin": { - "description": "Sets the minimum boundary for iso-surface plot.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(isomin=<VALUE>, selector=dict(type='isosurface'))" - }, - "lighting": { - "ambient": { - "description": "Ambient light increases overall color visibility but can wash out the image.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='isosurface'))" - }, - "diffuse": { - "description": "Represents the extent that incident rays are reflected in a range of angles.", - "dflt": 0.8, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='isosurface'))" - }, - "editType": "calc", - "facenormalsepsilon": { - "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='isosurface'))" - }, - "fresnel": { - "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", - "dflt": 0.2, - "editType": "calc", - "max": 5, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='isosurface'))" - }, - "role": "object", - "roughness": { - "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", - "dflt": 0.5, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='isosurface'))" - }, - "specular": { - "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", - "dflt": 0.05, - "editType": "calc", - "max": 2, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='isosurface'))" - }, - "vertexnormalsepsilon": { - "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", - "dflt": 1e-12, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='isosurface'))" - }, - "lightposition": { - "editType": "calc", - "role": "object", - "x": { - "description": "Numeric vector, representing the X coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='isosurface'))" - }, - "y": { - "description": "Numeric vector, representing the Y coordinate for each vertex.", - "dflt": 100000, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='isosurface'))" - }, - "z": { - "description": "Numeric vector, representing the Z coordinate for each vertex.", - "dflt": 0, - "editType": "calc", - "max": 100000, - "min": -100000, - "valType": "number", - "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='isosurface'))" - }, - "slices": { - "editType": "calc", - "role": "object", - "x": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_x_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis x except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_x_locations=<VALUE>, selector=dict(type='isosurface'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the x dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_x_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(slices_x=dict(...), selector=dict(type='isosurface'))" - }, - "y": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_y_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis y except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_y_locations=<VALUE>, selector=dict(type='isosurface'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the y dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_y_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(slices_y=dict(...), selector=dict(type='isosurface'))" - }, - "z": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(slices_z_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "locations": { - "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis z except start and end.", - "dflt": [], - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(slices_z_locations=<VALUE>, selector=dict(type='isosurface'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "show": { - "description": "Determines whether or not slice planes about the z dimension are drawn.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(slices_z_show=<VALUE>, selector=dict(type='isosurface'))" - }, - "magic_underscores": "fig.update_traces(slices_z=dict(...), selector=dict(type='isosurface'))" + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(slices=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='mesh3d'))" }, - "spaceframe": { - "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the `spaceframe` elements. The default fill value is 0.15 meaning that only 15% of the area of every faces of tetras would be shaded. Applying a greater `fill` ratio would allow the creation of stronger elements or could be sued to have entirely closed areas (in case of using 1).", - "dflt": 0.15, + "lighting": { + "ambient": { + "description": "Ambient light increases overall color visibility but can wash out the image.", + "dflt": 0.8, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(spaceframe_fill=<VALUE>, selector=dict(type='isosurface'))" - }, - "role": "object", - "show": { - "description": "Displays/hides tetrahedron shapes between minimum and maximum iso-values. Often useful when either caps or surfaces are disabled or filled with values less than 1.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(spaceframe_show=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(spaceframe=dict(...), selector=dict(type='isosurface'))" - }, - "surface": { - "count": { - "description": "Sets the number of iso-surfaces between minimum and maximum iso-values. By default this value is 2 meaning that only minimum and maximum surfaces would be drawn.", - "dflt": 2, + "diffuse": { + "description": "Represents the extent that incident rays are reflected in a range of angles.", + "dflt": 0.8, "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(surface_count=<VALUE>, selector=dict(type='isosurface'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='mesh3d'))" }, "editType": "calc", - "fill": { - "description": "Sets the fill ratio of the iso-surface. The default fill value of the surface is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", - "dflt": 1, + "facenormalsepsilon": { + "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-06, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(surface_fill=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='mesh3d'))" }, - "pattern": { - "description": "Sets the surface pattern of the iso-surface 3-D sections. The default pattern of the surface is `all` meaning that the rest of surface elements would be shaded. The check options (either 1 or 2) could be used to draw half of the squares on the surface. Using various combinations of capital `A`, `B`, `C`, `D` and `E` may also be used to reduce the number of triangles on the iso-surfaces and creating other patterns of interest.", - "dflt": "all", + "fresnel": { + "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", + "dflt": 0.2, "editType": "calc", - "extras": [ - "all", - "odd", - "even" - ], - "flags": [ - "A", - "B", - "C", - "D", - "E" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(surface_pattern=<VALUE>, selector=dict(type='isosurface'))" + "max": 5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='mesh3d'))" }, "role": "object", - "show": { - "description": "Hides/displays surfaces between minimum and maximum iso-values.", - "dflt": true, + "roughness": { + "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", + "dflt": 0.5, "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(surface_show=<VALUE>, selector=dict(type='isosurface'))" + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(surface=dict(...), selector=dict(type='isosurface'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='isosurface'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, + "specular": { + "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", + "dflt": 0.05, "editType": "calc", - "max": 10000, + "max": 2, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='mesh3d'))" + }, + "vertexnormalsepsilon": { + "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-12, + "editType": "calc", + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='mesh3d'))" }, + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='mesh3d'))" + }, + "lightposition": { + "editType": "calc", "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "x": { + "description": "Numeric vector, representing the X coordinate for each vertex.", + "dflt": 100000, "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='isosurface'))" + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='mesh3d'))" + }, + "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='mesh3d'))" + }, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='isosurface'))" + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='mesh3d'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='isosurface'))" + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(xcalendar=<VALUE>, selector=dict(type='mesh3d'))" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(ycalendar=<VALUE>, selector=dict(type='mesh3d'))" + }, + "zcalendar": { + "description": "Sets the calendar system to use with `z` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ], + "magic_underscores": "fig.update_traces(zcalendar=<VALUE>, selector=dict(type='mesh3d'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='mesh3d'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='mesh3d'))" }, "categories": [ "gl3d", "showLegend" ], "meta": { - "description": "Draws isosurfaces between iso-min and iso-max values with coordinates given by four 1-dimensional arrays containing the `value`, `x`, `y` and `z` of every vertex of a uniform or non-uniform 3-D grid. Horizontal or vertical slices, caps as well as spaceframe between iso-min and iso-max values could also be drawn using this trace." + "description": "Draws sets of triangles with coordinates given by three 1-dimensional arrays in `x`, `y`, `z` and (1) a sets of `i`, `j`, `k` indices (2) Delaunay triangulation or (3) the Alpha-shape algorithm or (4) the Convex-hull algorithm" }, - "type": "isosurface" + "type": "mesh3d" }, - "scattergeo": { + "cone": { "animatable": false, "attributes": { - "type": "scattergeo", + "type": "cone", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='cone'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='cone'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -64787,35 +54323,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='cone'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, + "dflt": false, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='cone'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='cone'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='cone'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='cone'))" }, "legendgrouptitle": { "editType": "style", @@ -64823,7 +54359,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='cone'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -64833,7 +54369,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='cone'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -64848,7 +54384,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='cone'))" }, "role": "object", "shadow": { @@ -64856,13 +54392,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='cone'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='cone'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -64873,7 +54409,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='cone'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -64886,7 +54422,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='cone'))" }, "variant": { "description": "Sets the variant of the font.", @@ -64901,7 +54437,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='cone'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -64914,9 +54450,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='cone'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='cone'))" }, "role": "object", "text": { @@ -64924,172 +54460,88 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='cone'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='cone'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='cone'))" }, "opacity": { - "description": "Sets the opacity of the trace.", + "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", "dflt": 1, - "editType": "style", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scattergeo'))" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='cone'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattergeo'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='cone'))" }, - "lat": { - "description": "Sets the latitude coordinates (in degrees North).", - "editType": "calc", + "x": { + "description": "Sets the x coordinates of the vector field and of the displayed cones.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='cone'))" }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" + "y": { + "description": "Sets the y coordinates of the vector field and of the displayed cones.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='cone'))" }, - "geojson": { - "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used when `locations` is set. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='scattergeo'))" + "z": { + "description": "Sets the z coordinates of the vector field and of the displayed cones.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='cone'))" }, - "featureidkey": { - "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", - "dflt": "id", + "u": { + "description": "Sets the x components of the vector field.", "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(u=<VALUE>, selector=dict(type='cone'))" }, - "locations": { - "description": "Sets the coordinates via location IDs or names. Coordinates correspond to the centroid of each location given. See `locationmode` for more info.", + "v": { + "description": "Sets the y components of the vector field.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='scattergeo'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(v=<VALUE>, selector=dict(type='cone'))" }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", + "w": { + "description": "Sets the z components of the vector field.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='scattergeo'))" - }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(w=<VALUE>, selector=dict(type='cone'))" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair or item in `locations`. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) or `locations` coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattergeo'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattergeo'))" - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon`, `location` and `text`.", + "description": "Sets the text elements associated with the cones. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scattergeo'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattergeo'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='cone'))" }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair or item in `locations`. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) or `locations` coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Same as `text`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattergeo'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='cone'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "x+y+z+norm+text+name", "editType": "calc", "extras": [ "all", @@ -65097,398 +54549,593 @@ "skip" ], "flags": [ - "lon", - "lat", - "location", + "x", + "y", + "z", + "u", + "v", + "w", + "norm", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattergeo'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='cone'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `norm` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='cone'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='cone'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", "editType": "none", - "valType": "string" + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='cone'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='cone'))" + }, + "uhoverformat": { + "description": "Sets the hover text formatting rule for `u` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(uhoverformat=<VALUE>, selector=dict(type='cone'))" + }, + "vhoverformat": { + "description": "Sets the hover text formatting rule for `v` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(vhoverformat=<VALUE>, selector=dict(type='cone'))" + }, + "whoverformat": { + "description": "Sets the hover text formatting rule for `w` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(whoverformat=<VALUE>, selector=dict(type='cone'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattergeo'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='cone'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='cone'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='cone'))" }, - "geo": { - "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", - "dflt": "geo", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(geo=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='cone'))" }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='cone'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='cone'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='cone'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='cone'))" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='cone'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='cone'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='cone'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='cone'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='cone'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", "dflt": 0, - "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattergeo'))" + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='cone'))" }, - "angleref": { - "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen. With *north*, angle 0 points north based on the current map projection.", - "dflt": "up", - "editType": "calc", + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", "valType": "enumerated", "values": [ - "previous", - "up", - "north" + "h", + "v" ], - "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='cone'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='cone'))" }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='cone'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='cone'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='cone'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, + "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='cone'))" }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scattergeo'))" + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='cone'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='cone'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='cone'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "calc", + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='cone'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='cone'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='cone'))" }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scattergeo'))" + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='cone'))" }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scattergeo'))" + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='cone'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", + "tickfont": { + "color": { + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scattergeo'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scattergeo'))" - }, - "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scattergeo'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='cone'))" }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scattergeo'))" + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='cone'))" }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scattergeo'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scattergeo'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scattergeo'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" + "flags": [ + "under", + "over", + "through" ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='cone'))" }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scattergeo'))" + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='cone'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, + "size": { + "editType": "colorbars", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scattergeo'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='cone'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "calc", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scattergeo'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='cone'))" }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "calc", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='cone'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "calc", + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scattergeo'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='cone'))" }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scattergeo'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scattergeo'))" + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='cone'))" }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='cone'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='cone'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scattergeo'))" + "role": "object", + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='cone'))" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='cone'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='cone'))" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='cone'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='cone'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='cone'))" }, - "tickfont": { + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='cone'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='cone'))" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='cone'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='cone'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='cone'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='cone'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='cone'))" + }, + "title": { + "editType": "colorbars", + "font": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='cone'))" }, - "description": "Sets the color bar's tick label font", - "editType": "calc", + "description": "Sets this color bar's title font.", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='cone'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -65498,37 +55145,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='cone'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='cone'))" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='cone'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='cone'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -65536,12 +55183,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='cone'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -65551,12 +55198,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='cone'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -65564,1443 +55211,1587 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scattergeo'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scattergeo'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='cone'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scattergeo'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='cone'))" }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" + "right", + "top", + "bottom" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scattergeo'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='cone'))" }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scattergeo'))" + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='cone'))" }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='cone'))" + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='cone'))" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='cone'))" + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='cone'))" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='cone'))" + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='cone'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='cone'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='cone'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='cone'))" + }, + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='cone'))" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='cone'))" + }, + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='cone'))" + }, + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='cone'))" + }, + "reversescale": { + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='cone'))" + }, + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='cone'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='cone'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='cone'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v/w norm. Has no effect when `cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='cone'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='cone'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='cone'))" + }, + "anchor": { + "description": "Sets the cones' anchor with respect to their x/y/z positions. Note that *cm* denote the cone's center of mass which corresponds to 1/4 from the tail to tip.", + "dflt": "cm", + "editType": "calc", + "valType": "enumerated", + "values": [ + "tip", + "tail", + "cm", + "center" + ], + "magic_underscores": "fig.update_traces(anchor=<VALUE>, selector=dict(type='cone'))" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ], + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='cone'))" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='cone'))" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='cone'))" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color", + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='cone'))" }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='cone'))" }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scattergeo'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scattergeo'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattergeo'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='cone'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "string", + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='cone'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "size": { + "arrayOk": true, "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scattergeo'))" - }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scattergeo'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scattergeo'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scattergeo'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scattergeo'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scattergeo'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scattergeo'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scattergeo'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='cone'))" }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", "valType": "enumerated", "values": [ - "left", - "center", - "right" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='cone'))" }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", "valType": "enumerated", "values": [ - "container", - "paper" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scattergeo'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='cone'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", "valType": "enumerated", "values": [ - "top", - "middle", - "bottom" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='cone'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scattergeo'))" + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='cone'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='cone'))" }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattergeo'))" + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='cone'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, "editType": "none", - "valType": "string" + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='cone'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='cone'))" + }, + "lighting": { + "ambient": { + "description": "Ambient light increases overall color visibility but can wash out the image.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='cone'))" + }, + "diffuse": { + "description": "Represents the extent that incident rays are reflected in a range of angles.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='cone'))" }, "editType": "calc", - "gradient": { + "facenormalsepsilon": { + "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-06, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='cone'))" + }, + "fresnel": { + "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", + "dflt": 0.2, + "editType": "calc", + "max": 5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='cone'))" + }, + "role": "object", + "roughness": { + "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", + "dflt": 0.5, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='cone'))" + }, + "specular": { + "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", + "dflt": 0.05, + "editType": "calc", + "max": 2, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='cone'))" + }, + "vertexnormalsepsilon": { + "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-12, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='cone'))" + }, + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='cone'))" + }, + "lightposition": { + "editType": "calc", + "role": "object", + "x": { + "description": "Numeric vector, representing the X coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='cone'))" + }, + "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='cone'))" + }, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='cone'))" + }, + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='cone'))" + }, + "sizemode": { + "description": "Determines whether `sizeref` is set as a *scaled* (i.e unitless) scalar (normalized by the max u/v/w norm in the vector field) or as *absolute* value (in the same units as the vector field). To display sizes in actual vector length use *raw*.", + "dflt": "scaled", + "editType": "calc", + "valType": "enumerated", + "values": [ + "scaled", + "absolute", + "raw" + ], + "magic_underscores": "fig.update_traces(sizemode=<VALUE>, selector=dict(type='cone'))" + }, + "sizeref": { + "description": "Adjusts the cone size scaling. The size of the cones is determined by their u/v/w norm multiplied a factor and `sizeref`. This factor (computed internally) corresponds to the minimum \"time\" to travel across two successive x/y/z positions at the average velocity of those two successive positions. All cones in a given trace use the same factor. With `sizemode` set to *raw*, its default value is *1*. With `sizemode` set to *scaled*, `sizeref` is unitless, its default value is *0.5*. With `sizemode` set to *absolute*, `sizeref` has the same units as the u/v/w vector field, its the default value is half the sample's maximum vector norm.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(sizeref=<VALUE>, selector=dict(type='cone'))" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='cone'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='cone'))" + }, + "categories": [ + "gl3d", + "showLegend" + ], + "meta": { + "description": "Use cone traces to visualize vector fields. Specify a vector field using 6 1D arrays, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, `w`. The cones are drawn exactly at the positions given by `x`, `y` and `z`." + }, + "type": "cone" + }, + "streamtube": { + "animatable": false, + "attributes": { + "type": "streamtube", + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='streamtube'))" + }, + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string", + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='streamtube'))" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ], + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='streamtube'))" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": false, + "editType": "style", + "valType": "boolean", + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='streamtube'))" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='streamtube'))" + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number", + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='streamtube'))" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='streamtube'))" + }, + "legendgrouptitle": { + "editType": "style", + "font": { "color": { - "arrayOk": true, - "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", - "editType": "calc", + "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='streamtube'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='streamtube'))" }, - "editType": "calc", - "role": "object", - "type": { - "arrayOk": true, - "description": "Sets the type of gradient used to fill the markers", + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", + "editType": "style", + "extras": [ "none" ], - "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scattergeo'))" - }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scattergeo'))" - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='scattergeo'))" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='scattergeo'))" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='scattergeo'))" + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='scattergeo'))" + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='streamtube'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, + "size": { + "editType": "style", + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='scattergeo'))" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scattergeo'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" - }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scattergeo'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='streamtube'))" }, - "dash": { - "arrayOk": true, - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "calc", - "valType": "string", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scattergeo'))" - }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='streamtube'))" }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='scattergeo'))" + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='streamtube'))" }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scattergeo'))" + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='streamtube'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scattergeo'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='streamtube'))" }, "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scattergeo'))" + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string", + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='streamtube'))" }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='streamtube'))" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='streamtube'))" + }, + "opacity": { + "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='streamtube'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='streamtube'))" + }, + "x": { + "description": "Sets the x coordinates of the vector field.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='streamtube'))" + }, + "y": { + "description": "Sets the y coordinates of the vector field.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='streamtube'))" + }, + "z": { + "description": "Sets the z coordinates of the vector field.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='streamtube'))" + }, + "u": { + "description": "Sets the x components of the vector field.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(u=<VALUE>, selector=dict(type='streamtube'))" + }, + "v": { + "description": "Sets the y components of the vector field.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(v=<VALUE>, selector=dict(type='streamtube'))" + }, + "w": { + "description": "Sets the z components of the vector field.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(w=<VALUE>, selector=dict(type='streamtube'))" + }, + "text": { + "description": "Sets a text element associated with this trace. If trace `hoverinfo` contains a *text* flag, this text element will be seen in all hover labels. Note that streamtube traces do not support array `text` values.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='streamtube'))" + }, + "hovertext": { + "description": "Same as `text`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='streamtube'))" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "x+y+z+norm+text+name", + "editType": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "u", + "v", + "w", + "norm", + "divergence", + "text", + "name" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='streamtube'))" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `tubex`, `tubey`, `tubez`, `tubeu`, `tubev`, `tubew`, `norm` and `divergence`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='streamtube'))" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='streamtube'))" + }, + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "uhoverformat": { + "description": "Sets the hover text formatting rule for `u` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(uhoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "vhoverformat": { + "description": "Sets the hover text formatting rule for `v` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(vhoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "whoverformat": { + "description": "Sets the hover text formatting rule for `w` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(whoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any", + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='streamtube'))" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='streamtube'))" + }, + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='streamtube'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='streamtube'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='streamtube'))" }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='streamtube'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='streamtube'))" }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='streamtube'))" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", "valType": "enumerated", "values": [ - "diameter", - "area" + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" ], - "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scattergeo'))" - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='streamtube'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='streamtube'))" }, - "standoff": { - "arrayOk": true, - "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", - "dflt": 0, - "editType": "calc", + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scattergeo'))" - }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='streamtube'))" }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "calc", + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", "valType": "enumerated", "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" + "fraction", + "pixels" ], - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='streamtube'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='streamtube'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='streamtube'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattergeo'))" - }, - "line": { - "color": { - "description": "Sets the line color.", - "editType": "calc", + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='streamtube'))" }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "calc", - "valType": "string", + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='streamtube'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='streamtube'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" + "all", + "first", + "last", + "none" ], - "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='streamtube'))" }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean", + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='streamtube'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='streamtube'))" + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='streamtube'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scattergeo'))" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "calc", + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='streamtube'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle", + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='streamtube'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='streamtube'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='streamtube'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='streamtube'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='streamtube'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='streamtube'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='streamtube'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='streamtube'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='streamtube'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='streamtube'))" }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='streamtube'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='streamtube'))" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" ], - "flags": [ - "under", - "over", - "through" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='streamtube'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='streamtube'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='streamtube'))" }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": { + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='streamtube'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='streamtube'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='streamtube'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='streamtube'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='streamtube'))" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='streamtube'))" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='streamtube'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='streamtube'))" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='streamtube'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='streamtube'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='streamtube'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='streamtube'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='streamtube'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='streamtube'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='streamtube'))" }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattergeo'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='streamtube'))" }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "italic" + "left", + "center", + "right" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='streamtube'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='streamtube'))" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='streamtube'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='streamtube'))" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "top", + "middle", + "bottom" ], - "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='streamtube'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='streamtube'))" }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattergeo'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='streamtube'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='scattergeo'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='streamtube'))" }, - "selected": { + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='scattergeo'))" - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_textfont_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(selected_textfont=dict(...), selector=dict(type='scattergeo'))" + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='scattergeo'))" + "valType": "colorscale", + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='streamtube'))" }, - "unselected": { + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='scattergeo'))" - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_textfont_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "editType": "calc", - "role": "object", - "magic_underscores": "fig.update_traces(unselected_textfont=dict(...), selector=dict(type='scattergeo'))" - }, - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='scattergeo'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='streamtube'))" }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "reversescale": { + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", "dflt": false, + "editType": "plot", + "valType": "boolean", + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='streamtube'))" + }, + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='streamtube'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "dflt": true, "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, "valType": "boolean", - "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='streamtube'))" }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.", - "dflt": "none", + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well.", + "dflt": null, "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself" - ], - "magic_underscores": "fig.update_traces(fill=<VALUE>, selector=dict(type='scattergeo'))" + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='streamtube'))" }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v/w norm. Has no effect when `cauto` is `false`.", + "dflt": null, "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='scattergeo'))" + "impliedEdits": { + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='streamtube'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='streamtube'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='streamtube'))" }, "hoverlabel": { "align": { @@ -67014,36 +56805,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattergeo'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='streamtube'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='streamtube'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattergeo'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='streamtube'))" }, "editType": "none", "font": { @@ -67051,12 +56827,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattergeo'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='streamtube'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -67067,12 +56838,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattergeo'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='streamtube'))" }, "lineposition": { "arrayOk": true, @@ -67088,12 +56854,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='streamtube'))" }, "role": "object", "shadow": { @@ -67102,24 +56863,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='streamtube'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattergeo'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='streamtube'))" }, "style": { "arrayOk": true, @@ -67131,12 +56882,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattergeo'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='streamtube'))" }, "textcase": { "arrayOk": true, @@ -67150,12 +56896,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='streamtube'))" }, "variant": { "arrayOk": true, @@ -67171,12 +56912,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattergeo'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='streamtube'))" }, "weight": { "arrayOk": true, @@ -67190,14 +56926,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattergeo'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='streamtube'))" }, "namelength": { "arrayOk": true, @@ -67206,12 +56937,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattergeo'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='streamtube'))" }, "role": "object", "showarrow": { @@ -67219,80 +56945,181 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scattergeo'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='streamtube'))" }, - "locationmode": { - "description": "The library used by the *country names* `locationmode` option is changing in an upcoming version. Country names in existing plots may not work in the new version. Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute. *USA-states* accepts both two-letter abbreviations (e.g. *CA*) and full state names (e.g. *California*).", - "dflt": "ISO-3", + "lighting": { + "ambient": { + "description": "Ambient light increases overall color visibility but can wash out the image.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='streamtube'))" + }, + "diffuse": { + "description": "Represents the extent that incident rays are reflected in a range of angles.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='streamtube'))" + }, "editType": "calc", - "valType": "enumerated", - "values": [ - "ISO-3", - "USA-states", - "country names", - "geojson-id" - ], - "magic_underscores": "fig.update_traces(locationmode=<VALUE>, selector=dict(type='scattergeo'))" + "facenormalsepsilon": { + "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-06, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='streamtube'))" + }, + "fresnel": { + "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", + "dflt": 0.2, + "editType": "calc", + "max": 5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='streamtube'))" + }, + "role": "object", + "roughness": { + "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", + "dflt": 0.5, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='streamtube'))" + }, + "specular": { + "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", + "dflt": 0.05, + "editType": "calc", + "max": 2, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='streamtube'))" + }, + "vertexnormalsepsilon": { + "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-12, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='streamtube'))" }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattergeo'))" + "lightposition": { + "editType": "calc", + "role": "object", + "x": { + "description": "Numeric vector, representing the X coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='streamtube'))" + }, + "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='streamtube'))" + }, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='streamtube'))" + }, + "maxdisplayed": { + "description": "The maximum number of displayed segments in a streamtube.", + "dflt": 1000, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(maxdisplayed=<VALUE>, selector=dict(type='streamtube'))" + }, + "sizeref": { + "description": "The scaling factor for the streamtubes. The default is 1, which avoids two max divergence tubes from touching at adjacent starting positions.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(sizeref=<VALUE>, selector=dict(type='streamtube'))" }, - "stream": { + "starts": { "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, + "role": "object", + "x": { + "description": "Sets the x components of the starting position of the streamtubes", "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(starts_x=<VALUE>, selector=dict(type='streamtube'))" }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "y": { + "description": "Sets the y components of the starting position of the streamtubes", "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattergeo'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(starts_y=<VALUE>, selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattergeo'))" + "z": { + "description": "Sets the z components of the starting position of the streamtubes", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(starts_z=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(starts=dict(...), selector=dict(type='streamtube'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='scattergeo'))" + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='streamtube'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='streamtube'))" }, "categories": [ - "geo", - "symbols", - "showLegend", - "scatter-like" + "gl3d", + "showLegend" ], "meta": { - "description": "The data visualized as scatter point or lines on a geographic map is provided either by longitude/latitude pairs in `lon` and `lat` respectively or by geographic location IDs or names in `locations`.", - "hrName": "scatter_geo" + "description": "Use a streamtube trace to visualize flow in a vector field. Specify a vector field using 6 1D arrays of equal length, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, and `w`. By default, the tubes' starting positions will be cut from the vector field's x-z plane at its minimum y value. To specify your own starting position, use attributes `starts.x`, `starts.y` and `starts.z`. The color is encoded by the norm of (u, v, w), and the local radius by the divergence of (u, v, w)." }, - "type": "scattergeo" + "type": "streamtube" }, - "choropleth": { + "volume": { "animatable": false, "attributes": { - "type": "choropleth", + "type": "volume", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='volume'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='volume'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -67304,35 +57131,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='volume'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, - "editType": "style", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='volume'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='volume'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='volume'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='volume'))" }, "legendgrouptitle": { "editType": "style", @@ -67340,7 +57167,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='volume'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -67350,7 +57177,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='volume'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -67365,7 +57192,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='volume'))" }, "role": "object", "shadow": { @@ -67373,13 +57200,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='volume'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='volume'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -67390,7 +57217,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='volume'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -67403,7 +57230,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='volume'))" }, "variant": { "description": "Sets the variant of the font.", @@ -67418,7 +57245,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='volume'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -67431,9 +57258,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='volume'))" }, "role": "object", "text": { @@ -67441,75 +57268,63 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='volume'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='volume'))" + }, + "opacity": { + "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='volume'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='choropleth'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='volume'))" }, - "z": { - "description": "Sets the color values.", - "editType": "calc", + "x": { + "description": "Sets the X coordinates of the vertices on X axis.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='choropleth'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "geojson": { - "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='volume'))" }, - "featureidkey": { - "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", - "dflt": "id", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='choropleth'))" + "y": { + "description": "Sets the Y coordinates of the vertices on Y axis.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='volume'))" }, - "locations": { - "description": "Sets the coordinates via location IDs or names. See `locationmode` for more info.", - "editType": "calc", + "z": { + "description": "Sets the Z coordinates of the vertices on Z axis.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='volume'))" }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" + "value": { + "description": "Sets the 4th dimension (value) of the vertices.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='volume'))" }, "text": { "arrayOk": true, - "description": "Sets the text elements associated with each location.", + "description": "Sets the text elements associated with the vertices. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='choropleth'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='volume'))" }, "hovertext": { "arrayOk": true, @@ -67517,16 +57332,11 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='choropleth'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='volume'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -67535,68 +57345,70 @@ "skip" ], "flags": [ - "location", + "x", + "y", "z", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='choropleth'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='volume'))" }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", - "editType": "none", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='volume'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", - "editType": "none", + "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='volume'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='volume'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='volume'))" + }, + "valuehoverformat": { + "description": "Sets the hover text formatting rule for `value` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(valuehoverformat=<VALUE>, selector=dict(type='volume'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='choropleth'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='volume'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='choropleth'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='volume'))" }, - "geo": { - "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", - "dflt": "geo", - "editType": "calc", + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", "valType": "subplotid", - "magic_underscores": "fig.update_traces(geo=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='volume'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -67604,98 +57416,46 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='choropleth'))" - }, - "marker": { - "editType": "calc", - "line": { - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='choropleth'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='choropleth'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='choropleth'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the opacity of the locations.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='choropleth'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='volume'))" }, "colorbar": { "bgcolor": { "description": "Sets the color of padded area.", "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='volume'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='volume'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='volume'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", + "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='volume'))" }, - "editType": "colorbars", + "editType": "calc", "exponentformat": { "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", "dflt": "B", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "none", @@ -67706,88 +57466,88 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='volume'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, - "editType": "colorbars", + "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='volume'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='volume'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", "dflt": "fraction", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='volume'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", "dflt": 3, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='volume'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", "dflt": 0, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='volume'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", "dflt": "v", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='volume'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='volume'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='volume'))" }, "role": "object", "separatethousands": { "description": "If \"true\", even 4-digit integers are separated", "dflt": false, - "editType": "colorbars", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='volume'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", "dflt": "all", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -67795,19 +57555,19 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='volume'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "colorbars", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='volume'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", "dflt": "all", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -67815,12 +57575,12 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='volume'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -67828,71 +57588,71 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='volume'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", "dflt": 30, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='volume'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", "dflt": "pixels", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='volume'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", + "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='volume'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", - "editType": "colorbars", + "editType": "calc", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='volume'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='volume'))" }, "tickfont": { "color": { - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='volume'))" }, "description": "Sets the color bar's tick label font", - "editType": "colorbars", + "editType": "calc", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", + "editType": "calc", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='volume'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "extras": [ "none" ], @@ -67902,37 +57662,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='volume'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='volume'))" }, "size": { - "editType": "colorbars", + "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='volume'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='volume'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -67940,12 +57700,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='volume'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -67955,12 +57715,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='volume'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "extras": [ "normal", "bold" @@ -67968,79 +57728,79 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='volume'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='volume'))" }, "tickformatstops": { "items": { "tickformatstop": { "dtickrange": { "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", + "editType": "calc", "items": [ { - "editType": "colorbars", + "editType": "calc", "valType": "any" }, { - "editType": "colorbars", + "editType": "calc", "valType": "any" } ], "valType": "info_array" }, - "editType": "colorbars", + "editType": "calc", "enabled": { "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", "dflt": true, - "editType": "colorbars", + "editType": "calc", "valType": "boolean" }, "name": { "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", + "editType": "calc", "valType": "string" }, "role": "object", "templateitemname": { "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", + "editType": "calc", "valType": "string" }, "value": { "description": "string - dtickformat for described zoom level, the same as *tickformat*", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "string" } } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='volume'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "allow", "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='volume'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", "dflt": "outside", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "outside", @@ -68054,29 +57814,29 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='volume'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='volume'))" }, "ticklen": { "description": "Sets the tick length (in px).", "dflt": 5, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='volume'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", + "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "enumerated", "values": [ @@ -68084,86 +57844,76 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='volume'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='volume'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "outside", "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='volume'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='volume'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", + "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='choropleth'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='volume'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", + "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='choropleth'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='volume'))" }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='volume'))" }, "title": { - "editType": "colorbars", + "editType": "calc", "font": { "color": { - "editType": "colorbars", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='volume'))" }, "description": "Sets this color bar's title font.", - "editType": "colorbars", + "editType": "calc", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", + "editType": "calc", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='volume'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "extras": [ "none" ], @@ -68173,37 +57923,37 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='volume'))" }, "role": "object", "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='volume'))" }, "size": { - "editType": "colorbars", + "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='volume'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='volume'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -68211,12 +57961,12 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='volume'))" }, "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -68226,12 +57976,12 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='volume'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "extras": [ "normal", "bold" @@ -68239,222 +57989,290 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='volume'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ "right", "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='volume'))" }, "text": { "description": "Sets the title of the color bar.", - "editType": "colorbars", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='volume'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", + "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='volume'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "left", "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='volume'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", "dflt": 10, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='volume'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", "dflt": "paper", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='volume'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", + "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='volume'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "top", "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='volume'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", "dflt": 10, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='volume'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", "dflt": "paper", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='volume'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='volume'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='volume'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='volume'))" }, "reversescale": { - "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.", + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", "dflt": false, - "editType": "plot", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='volume'))" }, - "zauto": { - "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.", + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='volume'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here `value`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='volume'))" }, - "zmax": { - "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.", + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as `value` and if set, `cmin` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "cauto": false, + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='volume'))" }, - "zmid": { - "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`.", + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `value`. Has no effect when `cauto` is `false`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='volume'))" }, - "zmin": { - "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.", + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as `value` and if set, `cmax` must be set as well.", "dflt": null, "editType": "calc", "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" + "cauto": false, + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='volume'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='volume'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "caps": { "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='choropleth'))" - }, - "selected": { - "editType": "plot", - "marker": { - "editType": "plot", - "opacity": { - "description": "Sets the marker opacity of selected points.", + "role": "object", + "x": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(caps_x_fill=<VALUE>, selector=dict(type='volume'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='choropleth'))" + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the x `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_x_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(caps_x=dict(...), selector=dict(type='volume'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='choropleth'))" - }, - "unselected": { - "editType": "plot", - "marker": { - "editType": "plot", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "y": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(caps_y_fill=<VALUE>, selector=dict(type='volume'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='choropleth'))" + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the y `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_y_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(caps_y=dict(...), selector=dict(type='volume'))" + }, + "z": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(caps_z_fill=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the z `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_z_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(caps_z=dict(...), selector=dict(type='volume'))" }, + "magic_underscores": "fig.update_traces(caps=dict(...), selector=dict(type='volume'))" + }, + "contour": { + "color": { + "description": "Sets the color of the contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='volume'))" + }, + "editType": "calc", "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='choropleth'))" + "show": { + "description": "Sets whether or not dynamic contours are shown on hover", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='volume'))" + }, + "width": { + "description": "Sets the width of the contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='volume'))" + }, + "flatshading": { + "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='volume'))" }, "hoverlabel": { "align": { @@ -68468,36 +58286,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='choropleth'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='volume'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='choropleth'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='volume'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='choropleth'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='volume'))" }, "editType": "none", "font": { @@ -68505,12 +58308,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='choropleth'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='volume'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -68521,12 +58319,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='choropleth'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='volume'))" }, "lineposition": { "arrayOk": true, @@ -68542,12 +58335,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='volume'))" }, "role": "object", "shadow": { @@ -68556,24 +58344,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='choropleth'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='volume'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='choropleth'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='volume'))" }, "style": { "arrayOk": true, @@ -68585,12 +58363,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='choropleth'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='volume'))" }, "textcase": { "arrayOk": true, @@ -68604,12 +58377,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='choropleth'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='volume'))" }, "variant": { "arrayOk": true, @@ -68625,12 +58393,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='choropleth'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='volume'))" }, "weight": { "arrayOk": true, @@ -68644,14 +58407,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='choropleth'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='volume'))" }, "namelength": { "arrayOk": true, @@ -68660,91 +58418,326 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='volume'))" + }, + "isomax": { + "description": "Sets the maximum boundary for iso-surface plot.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(isomax=<VALUE>, selector=dict(type='volume'))" + }, + "isomin": { + "description": "Sets the minimum boundary for iso-surface plot.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(isomin=<VALUE>, selector=dict(type='volume'))" + }, + "lighting": { + "ambient": { + "description": "Ambient light increases overall color visibility but can wash out the image.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='volume'))" + }, + "diffuse": { + "description": "Represents the extent that incident rays are reflected in a range of angles.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='volume'))" + }, + "editType": "calc", + "facenormalsepsilon": { + "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='volume'))" + }, + "fresnel": { + "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", + "dflt": 0.2, + "editType": "calc", + "max": 5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "roughness": { + "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", + "dflt": 0.5, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='volume'))" + }, + "specular": { + "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", + "dflt": 0.05, + "editType": "calc", + "max": 2, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='volume'))" + }, + "vertexnormalsepsilon": { + "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-12, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='volume'))" + }, + "lightposition": { + "editType": "calc", + "role": "object", + "x": { + "description": "Numeric vector, representing the X coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='volume'))" + }, + "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='volume'))" + }, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='volume'))" + }, + "opacityscale": { + "description": "Sets the opacityscale. The opacityscale must be an array containing arrays mapping a normalized value to an opacity value. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 1], [0.5, 0.2], [1, 1]]` means that higher/lower values would have higher opacity values and those in the middle would be more transparent Alternatively, `opacityscale` may be a palette name string of the following list: 'min', 'max', 'extremes' and 'uniform'. The default is 'uniform'.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(opacityscale=<VALUE>, selector=dict(type='volume'))" + }, + "slices": { + "editType": "calc", + "role": "object", + "x": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_x_fill=<VALUE>, selector=dict(type='volume'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis x except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_x_locations=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the x dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_x_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(slices_x=dict(...), selector=dict(type='volume'))" + }, + "y": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_y_fill=<VALUE>, selector=dict(type='volume'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis y except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_y_locations=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the y dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_y_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(slices_y=dict(...), selector=dict(type='volume'))" + }, + "z": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_z_fill=<VALUE>, selector=dict(type='volume'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis z except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_z_locations=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the z dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_z_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(slices_z=dict(...), selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(slices=dict(...), selector=dict(type='volume'))" + }, + "spaceframe": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `spaceframe` elements. The default fill value is 1 meaning that they are entirely shaded. Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(spaceframe_fill=<VALUE>, selector=dict(type='volume'))" + }, + "role": "object", + "show": { + "description": "Displays/hides tetrahedron shapes between minimum and maximum iso-values. Often useful when either caps or surfaces are disabled or filled with values less than 1.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(spaceframe_show=<VALUE>, selector=dict(type='volume'))" + }, + "magic_underscores": "fig.update_traces(spaceframe=dict(...), selector=dict(type='volume'))" + }, + "surface": { + "count": { + "description": "Sets the number of iso-surfaces between minimum and maximum iso-values. By default this value is 2 meaning that only minimum and maximum surfaces would be drawn.", + "dflt": 2, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(surface_count=<VALUE>, selector=dict(type='volume'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the iso-surface. The default fill value of the surface is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(surface_fill=<VALUE>, selector=dict(type='volume'))" + }, + "pattern": { + "description": "Sets the surface pattern of the iso-surface 3-D sections. The default pattern of the surface is `all` meaning that the rest of surface elements would be shaded. The check options (either 1 or 2) could be used to draw half of the squares on the surface. Using various combinations of capital `A`, `B`, `C`, `D` and `E` may also be used to reduce the number of triangles on the iso-surfaces and creating other patterns of interest.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "odd", + "even" + ], + "flags": [ + "A", + "B", + "C", + "D", + "E" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(surface_pattern=<VALUE>, selector=dict(type='volume'))" }, "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "show": { + "description": "Hides/displays surfaces between minimum and maximum iso-values.", "dflt": true, - "editType": "none", + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(surface_show=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='choropleth'))" - }, - "locationmode": { - "description": "The library used by the *country names* `locationmode` option is changing in an upcoming version. Country names in existing plots may not work in the new version. Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute. *USA-states* accepts both two-letter abbreviations (e.g. *CA*) and full state names (e.g. *California*).", - "dflt": "ISO-3", - "editType": "calc", - "valType": "enumerated", - "values": [ - "ISO-3", - "USA-states", - "country names", - "geojson-id" - ], - "magic_underscores": "fig.update_traces(locationmode=<VALUE>, selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(surface=dict(...), selector=dict(type='volume'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='choropleth'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='choropleth'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='choropleth'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='volume'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='choropleth'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='volume'))" }, "categories": [ - "geo", - "noOpacity", + "gl3d", "showLegend" ], "meta": { - "description": "The data that describes the choropleth value-to-color mapping is set in `z`. The geographic locations corresponding to each value in `z` are set in `locations`." + "description": "Draws volume trace between iso-min and iso-max values with coordinates given by four 1-dimensional arrays containing the `value`, `x`, `y` and `z` of every vertex of a uniform or non-uniform 3-D grid. Horizontal or vertical slices, caps as well as spaceframe between iso-min and iso-max values could also be drawn using this trace." }, - "type": "choropleth" + "type": "volume" }, - "scattermap": { + "isosurface": { "animatable": false, "attributes": { - "type": "scattermap", + "type": "isosurface", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='isosurface'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='isosurface'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -68756,35 +58749,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='isosurface'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", + "dflt": false, + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='isosurface'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='isosurface'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='isosurface'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='isosurface'))" }, "legendgrouptitle": { "editType": "style", @@ -68792,7 +58785,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='isosurface'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -68802,7 +58795,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='isosurface'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -68817,7 +58810,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", "shadow": { @@ -68825,13 +58818,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='isosurface'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='isosurface'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -68842,7 +58835,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='isosurface'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -68855,7 +58848,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='isosurface'))" }, "variant": { "description": "Sets the variant of the font.", @@ -68870,7 +58863,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='isosurface'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -68883,9 +58876,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='isosurface'))" }, "role": "object", "text": { @@ -68893,217 +58886,75 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='isosurface'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='isosurface'))" }, "opacity": { - "description": "Sets the opacity of the trace.", + "description": "Sets the opacity of the surface. Please note that in the case of using high `opacity` values for example a value greater than or equal to 0.5 on two surfaces (and 0.25 with four surfaces), an overlay of multiple transparent surfaces may not perfectly be sorted in depth by the webgl API. This behavior may be improved in the near future and is subject to change.", "dflt": 1, - "editType": "style", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scattermap'))" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='isosurface'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattermap'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='isosurface'))" }, - "lat": { - "description": "Sets the latitude coordinates (in degrees North).", - "editType": "calc", + "x": { + "description": "Sets the X coordinates of the vertices on X axis.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='scattermap'))" - }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='isosurface'))" }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", - "editType": "calc", + "y": { + "description": "Sets the Y coordinates of the vertices on Y axis.", + "editType": "calc+clearAxisTypes", "valType": "data_array", - "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='isosurface'))" }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" + "z": { + "description": "Sets the Z coordinates of the vertices on Z axis.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='isosurface'))" }, - "cluster": { - "color": { - "arrayOk": true, - "description": "Sets the color for each cluster step.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(cluster_color=<VALUE>, selector=dict(type='scattermap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether clustering is enabled or disabled.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(cluster_enabled=<VALUE>, selector=dict(type='scattermap'))" - }, - "maxzoom": { - "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", - "dflt": 24, - "editType": "calc", - "max": 24, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_maxzoom=<VALUE>, selector=dict(type='scattermap'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_opacity=<VALUE>, selector=dict(type='scattermap'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "description": "Sets the size for each cluster step.", - "dflt": 20, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_size=<VALUE>, selector=dict(type='scattermap'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "step": { - "arrayOk": true, - "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", - "dflt": -1, - "editType": "calc", - "min": -1, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_step=<VALUE>, selector=dict(type='scattermap'))" - }, - "stepsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `step`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(cluster=dict(...), selector=dict(type='scattermap'))" + "value": { + "description": "Sets the 4th dimension (value) of the vertices.", + "editType": "calc+clearAxisTypes", + "valType": "data_array", + "magic_underscores": "fig.update_traces(value=<VALUE>, selector=dict(type='isosurface'))" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattermap'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattermap'))" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", + "description": "Sets the text elements associated with the vertices. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scattermap'))" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattermap'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='isosurface'))" }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Same as `text`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattermap'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='isosurface'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -69112,18 +58963,14 @@ "skip" ], "flags": [ - "lon", - "lat", + "x", + "y", + "z", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattermap'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='isosurface'))" }, "hovertemplate": { "arrayOk": true, @@ -69131,360 +58978,547 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='isosurface'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='isosurface'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "xhoverformat": { + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='isosurface'))" + }, + "yhoverformat": { + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(yhoverformat=<VALUE>, selector=dict(type='isosurface'))" + }, + "valuehoverformat": { + "description": "Sets the hover text formatting rule for `value` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format.By default the values are formatted using generic number format.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(valuehoverformat=<VALUE>, selector=dict(type='isosurface'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattermap'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='isosurface'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='isosurface'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(scene=<VALUE>, selector=dict(type='isosurface'))" }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", - "dflt": "map", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='isosurface'))" }, - "marker": { - "allowoverlap": { - "description": "Flag to draw all symbols, even if they overlap.", + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='isosurface'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='isosurface'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='isosurface'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='isosurface'))" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='isosurface'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_allowoverlap=<VALUE>, selector=dict(type='scattermap'))" + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='isosurface'))" }, - "angle": { - "arrayOk": true, - "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", - "dflt": "auto", + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, "editType": "calc", + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='isosurface'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='isosurface'))" }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='isosurface'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='isosurface'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='isosurface'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='isosurface'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='isosurface'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='isosurface'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='isosurface'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='isosurface'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='isosurface'))" }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scattermap'))" + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='isosurface'))" }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, "editType": "calc", - "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='isosurface'))" }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scattermap'))" + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='isosurface'))" }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "calc", "impliedEdits": { - "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + "tickmode": "linear", + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scattermap'))" + "valType": "any", + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='isosurface'))" }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scattermap'))" + "valType": "angle", + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='isosurface'))" }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scattermap'))" + "valType": "color", + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='isosurface'))" }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scattermap'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", + "tickfont": { + "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scattermap'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scattermap'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='isosurface'))" }, + "description": "Sets the color bar's tick label font", "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scattermap'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scattermap'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scattermap'))" + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='isosurface'))" }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "extras": [ + "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scattermap'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scattermap'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scattermap'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" + "flags": [ + "under", + "over", + "through" ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scattermap'))" + "valType": "flaglist", + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='isosurface'))" }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scattermap'))" + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='isosurface'))" }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, + "size": { "editType": "calc", - "min": 0, + "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scattermap'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='isosurface'))" }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scattermap'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='isosurface'))" }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "word caps", + "upper", + "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='isosurface'))" }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", "valType": "enumerated", "values": [ - "all", - "first", - "last", - "none" + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scattermap'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='isosurface'))" }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" + "extras": [ + "normal", + "bold" ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scattermap'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, - "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scattermap'))" + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='isosurface'))" }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='isosurface'))" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='isosurface'))" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scattermap'))" + "role": "object", + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='isosurface'))" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='isosurface'))" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" }, - "tickfont": { + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='isosurface'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ], + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='isosurface'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='isosurface'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='isosurface'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='isosurface'))" + }, + "title": { + "editType": "calc", + "font": { "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='isosurface'))" }, - "description": "Sets the color bar's tick label font", + "description": "Sets this color bar's title font.", "editType": "calc", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", @@ -69492,7 +59526,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='isosurface'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -69507,7 +59541,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", "shadow": { @@ -69515,13 +59549,13 @@ "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='isosurface'))" }, "size": { "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='isosurface'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -69532,7 +59566,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='isosurface'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -69545,7 +59579,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='isosurface'))" }, "variant": { "description": "Sets the variant of the font.", @@ -69560,7 +59594,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='isosurface'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -69573,642 +59607,290 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scattermap'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scattermap'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scattermap'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scattermap'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scattermap'))" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" - }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scattermap'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattermap'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattermap'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scattermap'))" - }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scattermap'))" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scattermap'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scattermap'))" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scattermap'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scattermap'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scattermap'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scattermap'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scattermap'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scattermap'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scattermap'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scattermap'))" - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scattermap'))" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scattermap'))" - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scattermap'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scattermap'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='isosurface'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "calc", "valType": "enumerated", "values": [ + "right", "top", - "middle", "bottom" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scattermap'))" - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='isosurface'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", + "text": { + "description": "Sets the title of the color bar.", "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scattermap'))" - }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattermap'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + "valType": "string", + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='isosurface'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattermap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='isosurface'))" }, - "editType": "calc", - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "calc", - "max": 1, - "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattermap'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scattermap'))" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='isosurface'))" }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scattermap'))" + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ], + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='isosurface'))" }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='isosurface'))" }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", "editType": "calc", "valType": "enumerated", "values": [ - "diameter", - "area" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scattermap'))" - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattermap'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattermap'))" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattermap'))" - }, - "line": { - "color": { - "description": "Sets the line color.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='isosurface'))" }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "calc", - "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scattermap'))" - }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scattermap'))" - }, - "textfont": { - "color": { - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='isosurface'))" }, - "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattermap'))" - }, - "role": "object", - "size": { + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='isosurface'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, "editType": "calc", - "min": 1, + "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='isosurface'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='isosurface'))" }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='isosurface'))" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattermap'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='isosurface'))" }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='scattermap'))" + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='isosurface'))" }, - "selected": { + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='scattermap'))" - }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='isosurface'))" + }, + "reversescale": { + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='isosurface'))" + }, + "zhoverformat": { + "description": "Sets the hover text formatting rule for `z` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `zaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(zhoverformat=<VALUE>, selector=dict(type='isosurface'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here `value`) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(cauto_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(cauto=<VALUE>, selector=dict(type='isosurface'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as `value` and if set, `cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmax_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmax=<VALUE>, selector=dict(type='isosurface'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as `value`. Has no effect when `cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(cmid_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmid=<VALUE>, selector=dict(type='isosurface'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as `value` and if set, `cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(cmin_impliedEdits=<VALUE>, selector=dict(type='isosurface'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(cmin=<VALUE>, selector=dict(type='isosurface'))" + }, + "caps": { + "editType": "calc", + "role": "object", + "x": { "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(caps_x_fill=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", - "size": { - "description": "Sets the marker size of selected points.", + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the x `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_x_show=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(caps_x=dict(...), selector=dict(type='isosurface'))" + }, + "y": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(caps_y_fill=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='scattermap'))" - }, - "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='scattermap'))" - }, - "unselected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "role": "object", + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the y `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='scattermap'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_y_show=<VALUE>, selector=dict(type='isosurface'))" }, + "magic_underscores": "fig.update_traces(caps_y=dict(...), selector=dict(type='isosurface'))" + }, + "z": { "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "fill": { + "description": "Sets the fill ratio of the `caps`. The default fill value of the `caps` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(caps_z_fill=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "show": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the z `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": true, "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='scattermap'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(caps_z_show=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(caps_z=dict(...), selector=dict(type='isosurface'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(caps=dict(...), selector=dict(type='isosurface'))" }, - "below": { - "description": "Determines if this scattermap trace's layers are to be inserted before the layer with the specified ID. By default, scattermap layers are inserted above all the base layers. To place the scattermap layers above every other layer, set `below` to *''*.", + "contour": { + "color": { + "description": "Sets the color of the contour lines.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(contour_color=<VALUE>, selector=dict(type='isosurface'))" + }, "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='scattermap'))" + "role": "object", + "show": { + "description": "Sets whether or not dynamic contours are shown on hover", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(contour_show=<VALUE>, selector=dict(type='isosurface'))" + }, + "width": { + "description": "Sets the width of the contour lines.", + "dflt": 2, + "editType": "calc", + "max": 16, + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(contour_width=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(contour=dict(...), selector=dict(type='isosurface'))" }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, + "flatshading": { + "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections.", + "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scattermap'))" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself" - ], - "magic_underscores": "fig.update_traces(fill=<VALUE>, selector=dict(type='scattermap'))" - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(flatshading=<VALUE>, selector=dict(type='isosurface'))" }, "hoverlabel": { "align": { @@ -70222,36 +59904,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattermap'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='isosurface'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattermap'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='isosurface'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattermap'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='isosurface'))" }, "editType": "none", "font": { @@ -70259,12 +59926,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattermap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='isosurface'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -70275,12 +59937,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattermap'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='isosurface'))" }, "lineposition": { "arrayOk": true, @@ -70296,12 +59953,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", "shadow": { @@ -70310,24 +59962,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattermap'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='isosurface'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattermap'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='isosurface'))" }, "style": { "arrayOk": true, @@ -70339,12 +59981,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattermap'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='isosurface'))" }, "textcase": { "arrayOk": true, @@ -70358,12 +59995,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattermap'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='isosurface'))" }, "variant": { "arrayOk": true, @@ -70379,12 +60011,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattermap'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='isosurface'))" }, "weight": { "arrayOk": true, @@ -70398,97 +60025,331 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='isosurface'))" + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer", + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='isosurface'))" + }, + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean", + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='isosurface'))" + }, + "isomax": { + "description": "Sets the maximum boundary for iso-surface plot.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(isomax=<VALUE>, selector=dict(type='isosurface'))" + }, + "isomin": { + "description": "Sets the minimum boundary for iso-surface plot.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(isomin=<VALUE>, selector=dict(type='isosurface'))" + }, + "lighting": { + "ambient": { + "description": "Ambient light increases overall color visibility but can wash out the image.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_ambient=<VALUE>, selector=dict(type='isosurface'))" + }, + "diffuse": { + "description": "Represents the extent that incident rays are reflected in a range of angles.", + "dflt": 0.8, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_diffuse=<VALUE>, selector=dict(type='isosurface'))" + }, + "editType": "calc", + "facenormalsepsilon": { + "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_facenormalsepsilon=<VALUE>, selector=dict(type='isosurface'))" + }, + "fresnel": { + "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.", + "dflt": 0.2, + "editType": "calc", + "max": 5, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_fresnel=<VALUE>, selector=dict(type='isosurface'))" + }, + "role": "object", + "roughness": { + "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.", + "dflt": 0.5, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_roughness=<VALUE>, selector=dict(type='isosurface'))" + }, + "specular": { + "description": "Represents the level that incident rays are reflected in a single direction, causing shine.", + "dflt": 0.05, + "editType": "calc", + "max": 2, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_specular=<VALUE>, selector=dict(type='isosurface'))" + }, + "vertexnormalsepsilon": { + "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry.", + "dflt": 1e-12, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(lighting_vertexnormalsepsilon=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(lighting=dict(...), selector=dict(type='isosurface'))" + }, + "lightposition": { + "editType": "calc", + "role": "object", + "x": { + "description": "Numeric vector, representing the X coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_x=<VALUE>, selector=dict(type='isosurface'))" + }, + "y": { + "description": "Numeric vector, representing the Y coordinate for each vertex.", + "dflt": 100000, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_y=<VALUE>, selector=dict(type='isosurface'))" + }, + "z": { + "description": "Numeric vector, representing the Z coordinate for each vertex.", + "dflt": 0, + "editType": "calc", + "max": 100000, + "min": -100000, + "valType": "number", + "magic_underscores": "fig.update_traces(lightposition_z=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(lightposition=dict(...), selector=dict(type='isosurface'))" + }, + "slices": { + "editType": "calc", + "role": "object", + "x": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_x_fill=<VALUE>, selector=dict(type='isosurface'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis x except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_x_locations=<VALUE>, selector=dict(type='isosurface'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the x dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_x_show=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(slices_x=dict(...), selector=dict(type='isosurface'))" + }, + "y": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_y_fill=<VALUE>, selector=dict(type='isosurface'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis y except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_y_locations=<VALUE>, selector=dict(type='isosurface'))" + }, + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the y dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_y_show=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(slices_y=dict(...), selector=dict(type='isosurface'))" + }, + "z": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `slices`. The default fill value of the `slices` is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(slices_z_fill=<VALUE>, selector=dict(type='isosurface'))" + }, + "locations": { + "description": "Specifies the location(s) of slices on the axis. When not specified slices would be created for all points of the axis z except start and end.", + "dflt": [], + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(slices_z_locations=<VALUE>, selector=dict(type='isosurface'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "role": "object", + "show": { + "description": "Determines whether or not slice planes about the z dimension are drawn.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(slices_z_show=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattermap'))" - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(slices_z=dict(...), selector=dict(type='isosurface'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(slices=dict(...), selector=dict(type='isosurface'))" + }, + "spaceframe": { + "editType": "calc", + "fill": { + "description": "Sets the fill ratio of the `spaceframe` elements. The default fill value is 0.15 meaning that only 15% of the area of every faces of tetras would be shaded. Applying a greater `fill` ratio would allow the creation of stronger elements or could be sued to have entirely closed areas (in case of using 1).", + "dflt": 0.15, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(spaceframe_fill=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "none", + "show": { + "description": "Displays/hides tetrahedron shapes between minimum and maximum iso-values. Often useful when either caps or surfaces are disabled or filled with values less than 1.", + "dflt": false, + "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(spaceframe_show=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scattermap'))" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(spaceframe=dict(...), selector=dict(type='isosurface'))" }, - "stream": { + "surface": { + "count": { + "description": "Sets the number of iso-surfaces between minimum and maximum iso-values. By default this value is 2 meaning that only minimum and maximum surfaces would be drawn.", + "dflt": 2, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(surface_count=<VALUE>, selector=dict(type='isosurface'))" + }, "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, + "fill": { + "description": "Sets the fill ratio of the iso-surface. The default fill value of the surface is 1 meaning that they are entirely shaded. On the other hand Applying a `fill` ratio less than one would allow the creation of openings parallel to the edges.", + "dflt": 1, "editType": "calc", - "max": 10000, + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(surface_fill=<VALUE>, selector=dict(type='isosurface'))" + }, + "pattern": { + "description": "Sets the surface pattern of the iso-surface 3-D sections. The default pattern of the surface is `all` meaning that the rest of surface elements would be shaded. The check options (either 1 or 2) could be used to draw half of the squares on the surface. Using various combinations of capital `A`, `B`, `C`, `D` and `E` may also be used to reduce the number of triangles on the iso-surfaces and creating other patterns of interest.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "odd", + "even" + ], + "flags": [ + "A", + "B", + "C", + "D", + "E" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(surface_pattern=<VALUE>, selector=dict(type='isosurface'))" }, "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "show": { + "description": "Hides/displays surfaces between minimum and maximum iso-values.", + "dflt": true, "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattermap'))" + "valType": "boolean", + "magic_underscores": "fig.update_traces(surface_show=<VALUE>, selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattermap'))" + "magic_underscores": "fig.update_traces(surface=dict(...), selector=dict(type='isosurface'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='scattermap'))" + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any", + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='isosurface'))" + }, + "magic_underscores": "fig.update_traces(..., selector=dict(type='isosurface'))" }, "categories": [ - "map", - "gl", - "symbols", - "showLegend", - "scatter-like" + "gl3d", + "showLegend" ], "meta": { - "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_map" + "description": "Draws isosurfaces between iso-min and iso-max values with coordinates given by four 1-dimensional arrays containing the `value`, `x`, `y` and `z` of every vertex of a uniform or non-uniform 3-D grid. Horizontal or vertical slices, caps as well as spaceframe between iso-min and iso-max values could also be drawn using this trace." }, - "type": "scattermap" + "type": "isosurface" }, - "scattermapbox": { + "scattergeo": { "animatable": false, "attributes": { - "type": "scattermapbox", + "type": "scattergeo", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scattergeo'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scattergeo'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -70500,35 +60361,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scattergeo'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": true, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scattergeo'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scattergeo'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scattergeo'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scattergeo'))" }, "legendgrouptitle": { "editType": "style", @@ -70536,7 +60397,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scattergeo'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -70546,7 +60407,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scattergeo'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -70561,7 +60422,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "shadow": { @@ -70569,13 +60430,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scattergeo'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -70586,7 +60447,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scattergeo'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -70599,7 +60460,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" }, "variant": { "description": "Sets the variant of the font.", @@ -70614,7 +60475,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scattergeo'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -70627,9 +60488,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scattergeo'))" }, "role": "object", "text": { @@ -70637,16 +60498,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scattergeo'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scattergeo'))" }, "opacity": { "description": "Sets the opacity of the trace.", @@ -70655,10 +60516,10 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scattergeo'))" }, "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", "dflt": "markers", "editType": "calc", "extras": [ @@ -70670,131 +60531,55 @@ "text" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scattergeo'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattergeo'))" }, "lat": { "description": "Sets the latitude coordinates (in degrees North).", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='scattergeo'))" }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" + "geojson": { + "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used when `locations` is set. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='scattergeo'))" }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", + "featureidkey": { + "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", + "dflt": "id", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='scattermapbox'))" + "valType": "string", + "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='scattergeo'))" }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" + "locations": { + "description": "Sets the coordinates via location IDs or names. Coordinates correspond to the centroid of each location given. See `locationmode` for more info.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='scattergeo'))" }, - "cluster": { - "color": { - "arrayOk": true, - "description": "Sets the color for each cluster step.", - "editType": "calc", - "valType": "color", - "magic_underscores": "fig.update_traces(cluster_color=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, + "lon": { + "description": "Sets the longitude coordinates (in degrees East).", "editType": "calc", - "enabled": { - "description": "Determines whether clustering is enabled or disabled.", - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(cluster_enabled=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "maxzoom": { - "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", - "dflt": 24, - "editType": "calc", - "max": 24, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_maxzoom=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_opacity=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "description": "Sets the size for each cluster step.", - "dflt": 20, - "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_size=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "step": { - "arrayOk": true, - "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", - "dflt": -1, - "editType": "calc", - "min": -1, - "valType": "number", - "magic_underscores": "fig.update_traces(cluster_step=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "stepsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `step`.", - "editType": "none", - "valType": "string" - }, - "magic_underscores": "fig.update_traces(cluster=dict(...), selector=dict(type='scattermapbox'))" + "valType": "data_array", + "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='scattergeo'))" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets text elements associated with each (lon,lat) pair or item in `locations`. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) or `locations` coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattergeo'))" }, "textposition": { - "arrayOk": false, + "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -70810,44 +60595,34 @@ "bottom center", "bottom right" ], - "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattergeo'))" }, "texttemplate": { "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon`, `location` and `text`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scattergeo'))" }, "texttemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattergeo'))" }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Sets hover text elements associated with each (lon,lat) pair or item in `locations`. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) or `locations` coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattergeo'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -70858,16 +60633,12 @@ "flags": [ "lon", "lat", + "location", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattergeo'))" }, "hovertemplate": { "arrayOk": true, @@ -70875,90 +60646,75 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scattergeo'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattergeo'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattergeo'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattergeo'))" }, - "subplot": { - "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", - "dflt": "mapbox", + "geo": { + "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", + "dflt": "geo", "editType": "calc", "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(geo=<VALUE>, selector=dict(type='scattergeo'))" }, "marker": { - "allowoverlap": { - "description": "Flag to draw all symbols, even if they overlap.", - "dflt": false, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_allowoverlap=<VALUE>, selector=dict(type='scattermapbox'))" - }, "angle": { "arrayOk": true, - "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", - "dflt": "auto", + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattermapbox'))" + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattergeo'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" + "angleref": { + "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen. With *north*, angle 0 points north based on the current map projection.", + "dflt": "up", + "editType": "calc", + "valType": "enumerated", + "values": [ + "previous", + "up", + "north" + ], + "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scattergeo'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scattergeo'))" }, "cauto": { "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scattergeo'))" }, "cmax": { "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", @@ -70966,20 +60722,20 @@ "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scattergeo'))" }, "cmid": { "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scattergeo'))" }, "cmin": { "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", @@ -70987,17 +60743,17 @@ "editType": "calc", "impliedEdits": { "cauto": false, - "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scattergeo'))" }, "color": { "arrayOk": true, "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scattergeo'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -71005,7 +60761,7 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scattergeo'))" }, "colorbar": { "bgcolor": { @@ -71013,14 +60769,14 @@ "dflt": "rgba(0,0,0,0)", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scattergeo'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scattergeo'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", @@ -71028,17 +60784,17 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scattergeo'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scattergeo'))" }, "editType": "calc", "exponentformat": { @@ -71055,14 +60811,14 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scattergeo'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scattergeo'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", @@ -71070,7 +60826,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scattergeo'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", @@ -71081,7 +60837,7 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scattergeo'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", @@ -71089,7 +60845,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scattergeo'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", @@ -71097,7 +60853,7 @@ "editType": "calc", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scattergeo'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", @@ -71108,14 +60864,14 @@ "h", "v" ], - "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scattergeo'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scattergeo'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", @@ -71123,7 +60879,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "separatethousands": { @@ -71131,7 +60887,7 @@ "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scattergeo'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", @@ -71144,14 +60900,14 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scattergeo'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scattergeo'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", @@ -71164,7 +60920,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scattergeo'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", @@ -71177,7 +60933,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scattergeo'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", @@ -71185,7 +60941,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scattergeo'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", @@ -71196,37 +60952,37 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scattergeo'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "calc", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scattergeo'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", "editType": "calc", "valType": "angle", - "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scattergeo'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scattergeo'))" }, "tickfont": { "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scattergeo'))" }, "description": "Sets the color bar's tick label font", "editType": "calc", @@ -71236,7 +60992,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scattergeo'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -71251,7 +61007,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "shadow": { @@ -71259,13 +61015,13 @@ "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scattergeo'))" }, "size": { "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scattergeo'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -71276,7 +61032,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scattergeo'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -71289,7 +61045,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scattergeo'))" }, "variant": { "description": "Sets the variant of the font.", @@ -71304,7 +61060,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scattergeo'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -71317,16 +61073,16 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scattergeo'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scattergeo'))" }, "tickformatstops": { "items": { @@ -71373,7 +61129,7 @@ } }, "role": "object", - "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scattergeo'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", @@ -71384,7 +61140,7 @@ "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scattergeo'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", @@ -71403,7 +61159,7 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scattergeo'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", @@ -71411,7 +61167,7 @@ "editType": "calc", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scattergeo'))" }, "ticklen": { "description": "Sets the tick length (in px).", @@ -71419,13 +61175,13 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scattergeo'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" }, "valType": "enumerated", "values": [ @@ -71433,14 +61189,14 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scattergeo'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scattergeo'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", @@ -71452,36 +61208,26 @@ "inside", "" ], - "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scattergeo'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scattergeo'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattergeo'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattergeo'))" }, "tickwidth": { "description": "Sets the tick width (in px).", @@ -71489,7 +61235,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scattergeo'))" }, "title": { "editType": "calc", @@ -71497,7 +61243,7 @@ "color": { "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scattergeo'))" }, "description": "Sets this color bar's title font.", "editType": "calc", @@ -71507,7 +61253,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scattergeo'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -71522,7 +61268,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "shadow": { @@ -71530,13 +61276,13 @@ "dflt": "none", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" }, "size": { "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scattergeo'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -71547,7 +61293,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scattergeo'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -71560,7 +61306,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" }, "variant": { "description": "Sets the variant of the font.", @@ -71575,7 +61321,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scattergeo'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -71588,13 +61334,13 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scattergeo'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "calc", "valType": "enumerated", "values": [ @@ -71602,21 +61348,21 @@ "top", "bottom" ], - "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scattergeo'))" }, "text": { "description": "Sets the title of the color bar.", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scattergeo'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scattergeo'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", @@ -71627,7 +61373,7 @@ "center", "right" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scattergeo'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", @@ -71635,7 +61381,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scattergeo'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", @@ -71646,63 +61392,198 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scattergeo'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scattergeo'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scattergeo'))" + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scattergeo'))" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scattergeo'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattergeo'))" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattergeo'))" + }, + "editType": "calc", + "gradient": { + "color": { + "arrayOk": true, + "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scattergeo'))" + }, + "editType": "calc", + "role": "object", + "type": { + "arrayOk": true, + "description": "Sets the type of gradient used to fill the markers", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ], + "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scattergeo'))" + }, + "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scattergeo'))" + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_autocolorscale=<VALUE>, selector=dict(type='scattergeo'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cauto_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_cauto=<VALUE>, selector=dict(type='scattergeo'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmax_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmax=<VALUE>, selector=dict(type='scattergeo'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_line_cmid_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmid=<VALUE>, selector=dict(type='scattergeo'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_line_cmin_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_cmin=<VALUE>, selector=dict(type='scattergeo'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='scattergeo'))" }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scattermapbox'))" + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scattergeo'))" }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, "editType": "calc", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scattermapbox'))" + "impliedEdits": { + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_line_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattergeo'))" + }, + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scattergeo'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", + "dash": { + "arrayOk": true, + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", "editType": "calc", - "valType": "enumerated", + "valType": "string", "values": [ - "container", - "paper" + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" ], - "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattermapbox'))" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattermapbox'))" + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_line_reversescale=<VALUE>, selector=dict(type='scattergeo'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scattergeo'))" + }, + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scattergeo'))" }, - "editType": "calc", "opacity": { "arrayOk": true, "description": "Sets the marker opacity.", @@ -71710,19 +61591,14 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "showscale": { @@ -71730,7 +61606,7 @@ "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scattergeo'))" }, "size": { "arrayOk": true, @@ -71739,7 +61615,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scattergeo'))" }, "sizemin": { "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", @@ -71747,7 +61623,7 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scattergeo'))" }, "sizemode": { "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", @@ -71758,41 +61634,543 @@ "diameter", "area" ], - "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number", - "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scattergeo'))" + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattergeo'))" + }, + "standoff": { + "arrayOk": true, + "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scattergeo'))" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "calc", + "valType": "enumerated", + "values": [ + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ], + "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattergeo'))" }, "line": { "color": { "description": "Sets the line color.", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scattergeo'))" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "calc", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ], + "magic_underscores": "fig.update_traces(line_dash=<VALUE>, selector=dict(type='scattergeo'))" }, "editType": "calc", "role": "object", @@ -71802,35 +62180,62 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scattergeo'))" }, "textfont": { "color": { + "arrayOk": true, "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattergeo'))" }, - "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", + "description": "Sets the text font.", "editType": "calc", "family": { + "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", "editType": "calc", "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattergeo'))" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scattergeo'))" + }, "size": { + "arrayOk": true, "editType": "calc", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattergeo'))" }, "style": { + "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", "editType": "calc", @@ -71839,9 +62244,40 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattergeo'))" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scattergeo'))" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scattergeo'))" }, "weight": { + "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", "editType": "calc", @@ -71852,15 +62288,15 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattergeo'))" }, "selectedpoints": { "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='scattergeo'))" }, "selected": { "editType": "calc", @@ -71869,7 +62305,7 @@ "description": "Sets the marker color of selected points.", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='scattergeo'))" }, "editType": "calc", "opacity": { @@ -71878,7 +62314,7 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "size": { @@ -71886,12 +62322,23 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='scattergeo'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='scattermapbox'))" + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_textfont_color=<VALUE>, selector=dict(type='scattergeo'))" + }, + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(selected_textfont=dict(...), selector=dict(type='scattergeo'))" + }, + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='scattergeo'))" }, "unselected": { "editType": "calc", @@ -71900,7 +62347,7 @@ "description": "Sets the marker color of unselected points, applied only when a selection exists.", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='scattergeo'))" }, "editType": "calc", "opacity": { @@ -71909,7 +62356,7 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "size": { @@ -71917,25 +62364,30 @@ "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='scattergeo'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='scattermapbox'))" - }, - "below": { - "description": "Determines if this scattermapbox trace's layers are to be inserted before the layer with the specified ID. By default, scattermapbox layers are inserted above all the base layers. To place the scattermapbox layers above every other layer, set `below` to *''*.", - "editType": "calc", - "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='scattermapbox'))" + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_textfont_color=<VALUE>, selector=dict(type='scattergeo'))" + }, + "editType": "calc", + "role": "object", + "magic_underscores": "fig.update_traces(unselected_textfont=dict(...), selector=dict(type='scattergeo'))" + }, + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='scattergeo'))" }, "connectgaps": { "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", "dflt": false, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scattergeo'))" }, "fill": { "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.", @@ -71946,13 +62398,13 @@ "none", "toself" ], - "magic_underscores": "fig.update_traces(fill=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(fill=<VALUE>, selector=dict(type='scattergeo'))" }, "fillcolor": { "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='scattergeo'))" }, "hoverlabel": { "align": { @@ -71966,36 +62418,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattergeo'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattergeo'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattergeo'))" }, "editType": "none", "font": { @@ -72003,12 +62440,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattergeo'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -72019,12 +62451,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattergeo'))" }, "lineposition": { "arrayOk": true, @@ -72040,12 +62467,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "shadow": { @@ -72054,24 +62476,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattergeo'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattergeo'))" }, "style": { "arrayOk": true, @@ -72083,12 +62495,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattergeo'))" }, "textcase": { "arrayOk": true, @@ -72102,12 +62509,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattergeo'))" }, "variant": { "arrayOk": true, @@ -72123,12 +62525,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattergeo'))" }, "weight": { "arrayOk": true, @@ -72142,14 +62539,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattergeo'))" }, "namelength": { "arrayOk": true, @@ -72158,12 +62550,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattergeo'))" }, "role": "object", "showarrow": { @@ -72171,68 +62558,58 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scattergeo'))" + }, + "locationmode": { + "description": "Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute. *USA-states* accepts both two-letter abbreviations (e.g. *CA*) and full state names (e.g. *California*).", + "dflt": "ISO-3", + "editType": "calc", + "valType": "enumerated", + "values": [ + "ISO-3", + "USA-states", + "country names", + "geojson-id" + ], + "magic_underscores": "fig.update_traces(locationmode=<VALUE>, selector=dict(type='scattergeo'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattermapbox'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattergeo'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='scattermapbox'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='scattergeo'))" }, "categories": [ - "mapbox", - "gl", + "geo", "symbols", "showLegend", "scatter-like" ], "meta": { - "description": "*scattermapbox* trace is deprecated! Please consider switching to the *scattermap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ The data visualized as scatter point, lines or marker symbols on a Mapbox GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_mapbox" + "description": "The data visualized as scatter point or lines on a geographic map is provided either by longitude/latitude pairs in `lon` and `lat` respectively or by geographic location IDs or names in `locations`.", + "hrName": "scatter_geo" }, - "type": "scattermapbox" + "type": "scattergeo" }, - "choroplethmap": { + "choropleth": { "animatable": false, "attributes": { - "type": "choroplethmap", + "type": "choropleth", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='choropleth'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='choropleth'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -72244,35 +62621,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='choropleth'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='choropleth'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='choropleth'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='choropleth'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='choropleth'))" }, "legendgrouptitle": { "editType": "style", @@ -72280,7 +62657,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='choropleth'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -72290,7 +62667,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='choropleth'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -72305,7 +62682,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "shadow": { @@ -72313,13 +62690,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='choropleth'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='choropleth'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -72330,7 +62707,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='choropleth'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -72343,7 +62720,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='choropleth'))" }, "variant": { "description": "Sets the variant of the font.", @@ -72358,7 +62735,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='choropleth'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -72371,9 +62748,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='choropleth'))" }, "role": "object", "text": { @@ -72381,62 +62758,47 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='choropleth'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='choropleth'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='choropleth'))" }, "z": { "description": "Sets the color values.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='choropleth'))" }, "geojson": { - "description": "Sets the GeoJSON data associated with this trace. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", + "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='choropleth'))" }, "featureidkey": { - "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Support nested property, for example *properties.name*.", + "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", "dflt": "id", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='choropleth'))" }, "locations": { - "description": "Sets which features found in *geojson* to plot using their feature `id` field.", + "description": "Sets the coordinates via location IDs or names. See `locationmode` for more info.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='choropleth'))" }, "text": { "arrayOk": true, @@ -72444,12 +62806,7 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='choropleth'))" }, "hovertext": { "arrayOk": true, @@ -72457,16 +62814,11 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='choropleth'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -72481,62 +62833,42 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='choropleth'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `properties` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='choropleth'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='choropleth'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='choropleth'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='choropleth'))" }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", - "dflt": "map", + "geo": { + "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", + "dflt": "geo", "editType": "calc", "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(geo=<VALUE>, selector=dict(type='choropleth'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -72544,7 +62876,7 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='choropleth'))" }, "marker": { "editType": "calc", @@ -72553,14 +62885,9 @@ "arrayOk": true, "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", "dflt": "#444", - "editType": "plot", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='choropleth'))" }, "editType": "calc", "role": "object", @@ -72568,35 +62895,25 @@ "arrayOk": true, "description": "Sets the width (in px) of the lines bounding the marker points.", "dflt": 1, - "editType": "plot", + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='choropleth'))" }, "opacity": { "arrayOk": true, "description": "Sets the opacity of the locations.", "dflt": 1, - "editType": "plot", + "editType": "style", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='choropleth'))" }, "colorbar": { "bgcolor": { @@ -72604,14 +62921,14 @@ "dflt": "rgba(0,0,0,0)", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='choropleth'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='choropleth'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", @@ -72619,17 +62936,17 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='choropleth'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='choropleth'))" }, "editType": "colorbars", "exponentformat": { @@ -72646,14 +62963,14 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='choropleth'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "colorbars", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='choropleth'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", @@ -72661,7 +62978,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='choropleth'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", @@ -72672,7 +62989,7 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='choropleth'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", @@ -72680,7 +62997,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='choropleth'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", @@ -72688,7 +63005,7 @@ "editType": "colorbars", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='choropleth'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", @@ -72699,14 +63016,14 @@ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='choropleth'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='choropleth'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", @@ -72714,7 +63031,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "separatethousands": { @@ -72722,7 +63039,7 @@ "dflt": false, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='choropleth'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", @@ -72735,14 +63052,14 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='choropleth'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='choropleth'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", @@ -72755,7 +63072,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='choropleth'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", @@ -72768,7 +63085,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='choropleth'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", @@ -72776,7 +63093,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='choropleth'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", @@ -72787,37 +63104,37 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='choropleth'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='choropleth'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", "editType": "colorbars", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='choropleth'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='choropleth'))" }, "tickfont": { "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='choropleth'))" }, "description": "Sets the color bar's tick label font", "editType": "colorbars", @@ -72827,7 +63144,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='choropleth'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -72842,7 +63159,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "shadow": { @@ -72850,13 +63167,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='choropleth'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='choropleth'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -72867,7 +63184,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='choropleth'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -72880,7 +63197,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='choropleth'))" }, "variant": { "description": "Sets the variant of the font.", @@ -72895,7 +63212,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='choropleth'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -72908,16 +63225,16 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='choropleth'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='choropleth'))" }, "tickformatstops": { "items": { @@ -72964,7 +63281,7 @@ } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='choropleth'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", @@ -72975,7 +63292,7 @@ "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='choropleth'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", @@ -72994,7 +63311,7 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='choropleth'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", @@ -73002,7 +63319,7 @@ "editType": "colorbars", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='choropleth'))" }, "ticklen": { "description": "Sets the tick length (in px).", @@ -73010,13 +63327,13 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='choropleth'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "enumerated", "values": [ @@ -73024,14 +63341,14 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='choropleth'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='choropleth'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", @@ -73043,36 +63360,26 @@ "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='choropleth'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='choropleth'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='choropleth'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='choropleth'))" }, "tickwidth": { "description": "Sets the tick width (in px).", @@ -73080,7 +63387,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='choropleth'))" }, "title": { "editType": "colorbars", @@ -73088,7 +63395,7 @@ "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='choropleth'))" }, "description": "Sets this color bar's title font.", "editType": "colorbars", @@ -73098,7 +63405,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='choropleth'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -73113,7 +63420,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "shadow": { @@ -73121,13 +63428,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='choropleth'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='choropleth'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -73138,7 +63445,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='choropleth'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -73151,7 +63458,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='choropleth'))" }, "variant": { "description": "Sets the variant of the font.", @@ -73166,7 +63473,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='choropleth'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -73179,13 +63486,13 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='choropleth'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -73193,21 +63500,21 @@ "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='choropleth'))" }, "text": { "description": "Sets the title of the color bar.", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='choropleth'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='choropleth'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", @@ -73218,7 +63525,7 @@ "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='choropleth'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", @@ -73226,7 +63533,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='choropleth'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", @@ -73237,13 +63544,13 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='choropleth'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='choropleth'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", @@ -73254,7 +63561,7 @@ "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='choropleth'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", @@ -73262,7 +63569,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='choropleth'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", @@ -73273,54 +63580,54 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='choropleth'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='choropleth'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='choropleth'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='choropleth'))" }, "reversescale": { "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.", "dflt": false, "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='choropleth'))" }, "zauto": { "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.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='choropleth'))" }, "zmax": { "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.", @@ -73328,20 +63635,20 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='choropleth'))" }, "zmid": { "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`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='choropleth'))" }, "zmin": { "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.", @@ -73349,16 +63656,16 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='choropleth'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='choropleth'))" }, "selectedpoints": { "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='choropleth'))" }, "selected": { "editType": "plot", @@ -73366,17 +63673,17 @@ "editType": "plot", "opacity": { "description": "Sets the marker opacity of selected points.", - "editType": "plot", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='choropleth'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='choropleth'))" }, "unselected": { "editType": "plot", @@ -73384,23 +63691,17 @@ "editType": "plot", "opacity": { "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "plot", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='choropleth'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='choroplethmap'))" - }, - "below": { - "description": "Determines if the choropleth polygons will be inserted before the layer with the specified ID. By default, choroplethmap traces are placed above the water layers. If set to '', the layer will be inserted above every existing layer.", - "editType": "plot", - "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='choropleth'))" }, "hoverlabel": { "align": { @@ -73414,36 +63715,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='choropleth'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='choropleth'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='choropleth'))" }, "editType": "none", "font": { @@ -73451,12 +63737,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='choropleth'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -73467,12 +63748,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='choropleth'))" }, "lineposition": { "arrayOk": true, @@ -73488,12 +63764,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "shadow": { @@ -73502,24 +63773,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='choropleth'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='choropleth'))" }, "style": { "arrayOk": true, @@ -73531,12 +63792,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='choropleth'))" }, "textcase": { "arrayOk": true, @@ -73550,12 +63806,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='choropleth'))" }, "variant": { "arrayOk": true, @@ -73571,12 +63822,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='choropleth'))" }, "weight": { "arrayOk": true, @@ -73590,14 +63836,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='choropleth'))" }, "namelength": { "arrayOk": true, @@ -73606,12 +63847,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='choropleth'))" }, "role": "object", "showarrow": { @@ -73619,67 +63855,56 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='choropleth'))" + }, + "locationmode": { + "description": "Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute. *USA-states* accepts both two-letter abbreviations (e.g. *CA*) and full state names (e.g. *California*).", + "dflt": "ISO-3", + "editType": "calc", + "valType": "enumerated", + "values": [ + "ISO-3", + "USA-states", + "country names", + "geojson-id" + ], + "magic_underscores": "fig.update_traces(locationmode=<VALUE>, selector=dict(type='choropleth'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='choroplethmap'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='choropleth'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='choroplethmap'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='choropleth'))" }, "categories": [ - "map", - "gl", + "geo", "noOpacity", "showLegend" ], "meta": { - "description": "GeoJSON features to be filled are set in `geojson` The data that describes the choropleth value-to-color mapping is set in `locations` and `z`.", - "hr_name": "choropleth_map" + "description": "The data that describes the choropleth value-to-color mapping is set in `z`. The geographic locations corresponding to each value in `z` are set in `locations`." }, - "type": "choroplethmap" + "type": "choropleth" }, - "choroplethmapbox": { + "scattermap": { "animatable": false, "attributes": { - "type": "choroplethmapbox", + "type": "scattermap", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='scattermap'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='scattermap'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -73691,35 +63916,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='scattermap'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": false, + "dflt": true, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='scattermap'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='scattermap'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='scattermap'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='scattermap'))" }, "legendgrouptitle": { "editType": "style", @@ -73727,7 +63952,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='scattermap'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -73737,7 +63962,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='scattermap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -73752,7 +63977,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" }, "role": "object", "shadow": { @@ -73760,13 +63985,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='scattermap'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='scattermap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -73777,7 +64002,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='scattermap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -73790,7 +64015,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='scattermap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -73805,7 +64030,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='scattermap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -73818,9 +64043,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='scattermap'))" }, "role": "object", "text": { @@ -73828,92 +64053,167 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='scattermap'))" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='scattermap'))" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='scattermap'))" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "dflt": "markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(mode=<VALUE>, selector=dict(type='scattermap'))" + }, + "ids": { + "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattermap'))" + }, + "lat": { + "description": "Sets the latitude coordinates (in degrees North).", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='scattermap'))" + }, + "lon": { + "description": "Sets the longitude coordinates (in degrees East).", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='scattermap'))" + }, + "cluster": { + "color": { + "arrayOk": true, + "description": "Sets the color for each cluster step.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(cluster_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether clustering is enabled or disabled.", + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(cluster_enabled=<VALUE>, selector=dict(type='scattermap'))" + }, + "maxzoom": { + "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", + "dflt": 24, + "editType": "calc", + "max": 24, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(cluster_maxzoom=<VALUE>, selector=dict(type='scattermap'))" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(cluster_opacity=<VALUE>, selector=dict(type='scattermap'))" + }, + "role": "object", + "size": { + "arrayOk": true, + "description": "Sets the size for each cluster step.", + "dflt": 20, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(cluster_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "step": { + "arrayOk": true, + "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", + "dflt": -1, + "editType": "calc", + "min": -1, + "valType": "number", + "magic_underscores": "fig.update_traces(cluster_step=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ids": { - "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the color values.", - "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "geojson": { - "description": "Sets the GeoJSON data associated with this trace. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", - "editType": "calc", - "valType": "any", - "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(cluster=dict(...), selector=dict(type='scattermap'))" }, - "featureidkey": { - "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Support nested property, for example *properties.name*.", - "dflt": "id", + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattermap'))" }, - "locations": { - "description": "Sets which features found in *geojson* to plot using their feature `id` field.", + "textposition": { + "arrayOk": false, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ], + "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattermap'))" }, - "text": { + "texttemplate": { "arrayOk": true, - "description": "Sets the text elements associated with each location.", + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(texttemplate=<VALUE>, selector=dict(type='scattermap'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattermap'))" }, "hovertext": { "arrayOk": true, - "description": "Same as `text`.", + "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattermap'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "extras": [ @@ -73922,932 +64222,1048 @@ "skip" ], "flags": [ - "location", - "z", + "lon", + "lat", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattermap'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `properties` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", - "editType": "none", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='scattermap'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", - "editType": "none", + "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattermap'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattermap'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattermap'))" }, "subplot": { - "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", - "dflt": "mapbox", - "editType": "calc", - "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, + "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", + "dflt": "map", "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='scattermap'))" }, "marker": { - "editType": "calc", - "line": { - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "allowoverlap": { + "description": "Flag to draw all symbols, even if they overlap.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_allowoverlap=<VALUE>, selector=dict(type='scattermap'))" + }, + "angle": { + "arrayOk": true, + "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", + "dflt": "auto", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scattermap'))" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_autocolorscale_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_autocolorscale=<VALUE>, selector=dict(type='scattermap'))" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cauto_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_cauto=<VALUE>, selector=dict(type='scattermap'))" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmax_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmax=<VALUE>, selector=dict(type='scattermap'))" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_cmid_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmid=<VALUE>, selector=dict(type='scattermap'))" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false, + "magic_underscores": "fig.update_traces(marker_cmin_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_cmin=<VALUE>, selector=dict(type='scattermap'))" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid", + "magic_underscores": "fig.update_traces(marker_coloraxis=<VALUE>, selector=dict(type='scattermap'))" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bgcolor=<VALUE>, selector=dict(type='scattermap'))" + }, + "bordercolor": { + "description": "Sets the axis line color.", "dflt": "#444", - "editType": "plot", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_bordercolor=<VALUE>, selector=dict(type='scattermap'))" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_borderwidth=<VALUE>, selector=dict(type='scattermap'))" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_dtick=<VALUE>, selector=dict(type='scattermap'))" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_exponentformat=<VALUE>, selector=dict(type='scattermap'))" + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_labelalias=<VALUE>, selector=dict(type='scattermap'))" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_len=<VALUE>, selector=dict(type='scattermap'))" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_lenmode=<VALUE>, selector=dict(type='scattermap'))" + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_minexponent=<VALUE>, selector=dict(type='scattermap'))" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_nticks=<VALUE>, selector=dict(type='scattermap'))" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_orientation=<VALUE>, selector=dict(type='scattermap'))" + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinecolor=<VALUE>, selector=dict(type='scattermap'))" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_outlinewidth=<VALUE>, selector=dict(type='scattermap'))" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_separatethousands=<VALUE>, selector=dict(type='scattermap'))" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showexponent=<VALUE>, selector=dict(type='scattermap'))" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_colorbar_showticklabels=<VALUE>, selector=dict(type='scattermap'))" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showtickprefix=<VALUE>, selector=dict(type='scattermap'))" + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_showticksuffix=<VALUE>, selector=dict(type='scattermap'))" + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_thickness=<VALUE>, selector=dict(type='scattermap'))" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_thicknessmode=<VALUE>, selector=dict(type='scattermap'))" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "any", + "magic_underscores": "fig.update_traces(marker_colorbar_tick0=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle", + "magic_underscores": "fig.update_traces(marker_colorbar_tickangle=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", "valType": "color", - "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickcolor=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickfont": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_family=<VALUE>, selector=dict(type='scattermap'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='scattermap'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_shadow=<VALUE>, selector=dict(type='scattermap'))" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_style=<VALUE>, selector=dict(type='scattermap'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_textcase=<VALUE>, selector=dict(type='scattermap'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_variant=<VALUE>, selector=dict(type='scattermap'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont_weight=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_tickfont=dict(...), selector=dict(type='scattermap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformat=<VALUE>, selector=dict(type='scattermap'))" }, - "editType": "calc", - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='choroplethmapbox'))" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object", + "magic_underscores": "fig.update_traces(marker_colorbar_tickformatstops=list(...), selector=dict(type='scattermap'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the opacity of the locations.", - "dflt": 1, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelposition=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklabelstep=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='choroplethmapbox'))" + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ticklen=<VALUE>, selector=dict(type='scattermap'))" }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": { + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" + }, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_tickmode=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_tickprefix=<VALUE>, selector=dict(type='scattermap'))" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticks=<VALUE>, selector=dict(type='scattermap'))" }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_ticksuffix=<VALUE>, selector=dict(type='scattermap'))" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array", + "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattermap'))" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_tickwidth=<VALUE>, selector=dict(type='scattermap'))" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_family=<VALUE>, selector=dict(type='scattermap'))" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_shadow=<VALUE>, selector=dict(type='scattermap'))" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_style=<VALUE>, selector=dict(type='scattermap'))" + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_textcase=<VALUE>, selector=dict(type='scattermap'))" + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_variant=<VALUE>, selector=dict(type='scattermap'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(marker_colorbar_title_font_weight=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title_font=dict(...), selector=dict(type='scattermap'))" + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_title_side=<VALUE>, selector=dict(type='scattermap'))" + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_colorbar_title_text=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(marker_colorbar_title=dict(...), selector=dict(type='scattermap'))" }, - "size": { - "editType": "colorbars", - "min": 1, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_x=<VALUE>, selector=dict(type='scattermap'))" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "left", + "center", + "right" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xanchor=<VALUE>, selector=dict(type='scattermap'))" }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_xpad=<VALUE>, selector=dict(type='scattermap'))" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "container", + "paper" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_xref=<VALUE>, selector=dict(type='scattermap'))" }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_y=<VALUE>, selector=dict(type='scattermap'))" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "top", + "middle", + "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar_yanchor=<VALUE>, selector=dict(type='scattermap'))" }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='choroplethmapbox'))" + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_colorbar_ypad=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ], + "magic_underscores": "fig.update_traces(marker_colorbar_yref=<VALUE>, selector=dict(type='scattermap'))" }, - "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='choroplethmapbox'))" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattermap'))" }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "autocolorscale": false, + "magic_underscores": "fig.update_traces(marker_colorscale_impliedEdits=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "valType": "colorscale", + "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattermap'))" }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", + "editType": "calc", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattermap'))" }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='choroplethmapbox'))" + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_reversescale=<VALUE>, selector=dict(type='scattermap'))" }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='choroplethmapbox'))" + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(marker_showscale=<VALUE>, selector=dict(type='scattermap'))" }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_size=<VALUE>, selector=dict(type='scattermap'))" }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_sizemin=<VALUE>, selector=dict(type='scattermap'))" }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", "valType": "enumerated", "values": [ - "container", - "paper" + "diameter", + "area" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker_sizemode=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='choroplethmapbox'))" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number", + "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", + "dflt": "circle", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "reversescale": { - "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.", - "dflt": false, - "editType": "plot", - "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattermap'))" }, - "zauto": { - "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.", - "dflt": true, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "line": { + "color": { + "description": "Sets the line color.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(line_color=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "zmax": { - "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.", - "dflt": null, "editType": "calc", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(line_width=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(line=dict(...), selector=dict(type='scattermap'))" }, - "zmid": { - "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`.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "textfont": { + "color": { + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "zmin": { - "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.", - "dflt": null, + "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", "editType": "calc", - "impliedEdits": { - "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='choroplethmapbox'))" + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "dflt": "Open Sans Regular, Arial Unicode MS Regular", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string", + "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattermap'))" }, - "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='choroplethmapbox'))" + "role": "object", + "size": { + "editType": "calc", + "min": 1, + "valType": "number", + "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ], + "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattermap'))" + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer", + "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattermap'))" }, "selectedpoints": { "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", "editType": "calc", "valType": "any", - "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='scattermap'))" }, "selected": { - "editType": "plot", + "editType": "calc", "marker": { - "editType": "plot", + "color": { + "description": "Sets the marker color of selected points.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(selected_marker_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "editType": "calc", "opacity": { "description": "Sets the marker opacity of selected points.", - "editType": "plot", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='scattermap'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='choroplethmapbox'))" + "size": { + "description": "Sets the marker size of selected points.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(selected_marker_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='scattermap'))" }, "role": "object", - "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='scattermap'))" }, "unselected": { - "editType": "plot", + "editType": "calc", "marker": { - "editType": "plot", + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(unselected_marker_color=<VALUE>, selector=dict(type='scattermap'))" + }, + "editType": "calc", "opacity": { "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "plot", + "editType": "calc", "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='scattermap'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='choroplethmapbox'))" + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "calc", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_size=<VALUE>, selector=dict(type='scattermap'))" + }, + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='scattermap'))" }, "role": "object", - "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='scattermap'))" }, "below": { - "description": "Determines if the choropleth polygons will be inserted before the layer with the specified ID. By default, choroplethmapbox traces are placed above the water layers. If set to '', the layer will be inserted above every existing layer.", - "editType": "plot", + "description": "Determines if this scattermap trace's layers are to be inserted before the layer with the specified ID. By default, scattermap layers are inserted above all the base layers. To place the scattermap layers above every other layer, set `below` to *''*.", + "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='scattermap'))" + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean", + "magic_underscores": "fig.update_traces(connectgaps=<VALUE>, selector=dict(type='scattermap'))" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself" + ], + "magic_underscores": "fig.update_traces(fill=<VALUE>, selector=dict(type='scattermap'))" + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "calc", + "valType": "color", + "magic_underscores": "fig.update_traces(fillcolor=<VALUE>, selector=dict(type='scattermap'))" }, "hoverlabel": { "align": { @@ -74861,36 +65277,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattermap'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattermap'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattermap'))" }, "editType": "none", "font": { @@ -74898,12 +65299,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattermap'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -74914,12 +65310,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattermap'))" }, "lineposition": { "arrayOk": true, @@ -74935,12 +65326,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattermap'))" }, "role": "object", "shadow": { @@ -74949,24 +65335,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattermap'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattermap'))" }, "style": { "arrayOk": true, @@ -74978,12 +65354,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattermap'))" }, "textcase": { "arrayOk": true, @@ -74997,12 +65368,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattermap'))" }, "variant": { "arrayOk": true, @@ -75018,12 +65384,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattermap'))" }, "weight": { "arrayOk": true, @@ -75037,14 +65398,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattermap'))" }, "namelength": { "arrayOk": true, @@ -75053,12 +65409,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattermap'))" }, "role": "object", "showarrow": { @@ -75066,67 +65417,46 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='scattermap'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='choroplethmapbox'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattermap'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='choroplethmapbox'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='scattermap'))" }, "categories": [ - "mapbox", + "map", "gl", - "noOpacity", - "showLegend" + "symbols", + "showLegend", + "scatter-like" ], "meta": { - "description": "*choroplethmapbox* trace is deprecated! Please consider switching to the *choroplethmap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ GeoJSON features to be filled are set in `geojson` The data that describes the choropleth value-to-color mapping is set in `locations` and `z`.", - "hr_name": "choropleth_mapbox" + "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", + "hrName": "scatter_map" }, - "type": "choroplethmapbox" + "type": "scattermap" }, - "densitymap": { + "choroplethmap": { "animatable": false, "attributes": { - "type": "densitymap", + "type": "choroplethmap", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='choroplethmap'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='choroplethmap'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -75138,35 +65468,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='choroplethmap'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='choroplethmap'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='choroplethmap'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='choroplethmap'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='choroplethmap'))" }, "legendgrouptitle": { "editType": "style", @@ -75174,7 +65504,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='choroplethmap'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -75184,7 +65514,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='choroplethmap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -75199,7 +65529,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "shadow": { @@ -75207,13 +65537,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='choroplethmap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -75224,7 +65554,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='choroplethmap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -75237,7 +65567,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -75252,7 +65582,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -75265,9 +65595,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='choroplethmap'))" }, "role": "object", "text": { @@ -75275,184 +65605,117 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='choroplethmap'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='densitymap'))" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='choroplethmap'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='densitymap'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='choroplethmap'))" }, "z": { - "description": "Sets the points' weight. For example, a value of 10 would be equivalent to having 10 points of weight 1 in the same spot", + "description": "Sets the color values.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='densitymap'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, - "radius": { - "arrayOk": true, - "description": "Sets the radius of influence of one `lon` / `lat` point in pixels. Increasing the value makes the densitymap trace smoother, but less detailed.", - "dflt": 30, - "editType": "plot", - "min": 1, - "valType": "number", - "magic_underscores": "fig.update_traces(radius=<VALUE>, selector=dict(type='densitymap'))" - }, - "radiussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `radius`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='choroplethmap'))" }, - "lat": { - "description": "Sets the latitude coordinates (in degrees North).", + "geojson": { + "description": "Sets the GeoJSON data associated with this trace. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", "editType": "calc", - "valType": "data_array", - "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='densitymap'))" + "valType": "any", + "magic_underscores": "fig.update_traces(geojson=<VALUE>, selector=dict(type='choroplethmap'))" }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" + "featureidkey": { + "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Support nested property, for example *properties.name*.", + "dflt": "id", + "editType": "calc", + "valType": "string", + "magic_underscores": "fig.update_traces(featureidkey=<VALUE>, selector=dict(type='choroplethmap'))" }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", + "locations": { + "description": "Sets which features found in *geojson* to plot using their feature `id` field.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='densitymap'))" - }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(locations=<VALUE>, selector=dict(type='choroplethmap'))" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets the text elements associated with each location.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='densitymap'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='choroplethmap'))" }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Same as `text`.", "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='densitymap'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='choroplethmap'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", - "editType": "none", + "editType": "calc", "extras": [ "all", "none", "skip" ], "flags": [ - "lon", - "lat", + "location", "z", "text", "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='densitymap'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='choroplethmap'))" }, "hovertemplate": { "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variable `properties` Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='choroplethmap'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='densitymap'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='choroplethmap'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='densitymap'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='choroplethmap'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='densitymap'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='choroplethmap'))" }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", "dflt": "map", "editType": "calc", "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='choroplethmap'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -75460,7 +65723,44 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "marker": { + "editType": "calc", + "line": { + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "dflt": "#444", + "editType": "plot", + "valType": "color", + "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "editType": "calc", + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='choroplethmap'))" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the opacity of the locations.", + "dflt": 1, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='choroplethmap'))" }, "colorbar": { "bgcolor": { @@ -75468,14 +65768,14 @@ "dflt": "rgba(0,0,0,0)", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", @@ -75483,17 +65783,17 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='choroplethmap'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='choroplethmap'))" }, "editType": "colorbars", "exponentformat": { @@ -75510,14 +65810,14 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='choroplethmap'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "colorbars", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='choroplethmap'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", @@ -75525,7 +65825,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='choroplethmap'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", @@ -75536,7 +65836,7 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='choroplethmap'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", @@ -75544,7 +65844,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='choroplethmap'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", @@ -75552,7 +65852,7 @@ "editType": "colorbars", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='choroplethmap'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", @@ -75563,14 +65863,14 @@ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='choroplethmap'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", @@ -75578,7 +65878,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "separatethousands": { @@ -75586,7 +65886,7 @@ "dflt": false, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='choroplethmap'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", @@ -75599,14 +65899,14 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='choroplethmap'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='choroplethmap'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", @@ -75619,7 +65919,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='choroplethmap'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", @@ -75632,7 +65932,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='choroplethmap'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", @@ -75640,7 +65940,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='choroplethmap'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", @@ -75651,37 +65951,37 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='choroplethmap'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", "editType": "colorbars", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickfont": { "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='choroplethmap'))" }, "description": "Sets the color bar's tick label font", "editType": "colorbars", @@ -75691,7 +65991,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='choroplethmap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -75706,7 +66006,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "shadow": { @@ -75714,13 +66014,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='choroplethmap'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='choroplethmap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -75731,7 +66031,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='choroplethmap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -75744,7 +66044,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='choroplethmap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -75759,7 +66059,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='choroplethmap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -75772,16 +66072,16 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='choroplethmap'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickformatstops": { "items": { @@ -75828,7 +66128,7 @@ } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='choroplethmap'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", @@ -75839,7 +66139,7 @@ "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", @@ -75858,7 +66158,7 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", @@ -75866,7 +66166,7 @@ "editType": "colorbars", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticklen": { "description": "Sets the tick length (in px).", @@ -75874,13 +66174,13 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "enumerated", "values": [ @@ -75888,14 +66188,14 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", @@ -75907,36 +66207,26 @@ "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='choroplethmap'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='densitymap'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='densitymap'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='choroplethmap'))" }, "tickwidth": { "description": "Sets the tick width (in px).", @@ -75944,7 +66234,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='choroplethmap'))" }, "title": { "editType": "colorbars", @@ -75952,7 +66242,7 @@ "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='choroplethmap'))" }, "description": "Sets this color bar's title font.", "editType": "colorbars", @@ -75962,7 +66252,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='choroplethmap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -75977,7 +66267,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "shadow": { @@ -75985,13 +66275,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='choroplethmap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -76002,7 +66292,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='choroplethmap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -76015,7 +66305,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -76030,7 +66320,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -76043,13 +66333,13 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='choroplethmap'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -76057,21 +66347,21 @@ "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='choroplethmap'))" }, "text": { "description": "Sets the title of the color bar.", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='choroplethmap'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='choroplethmap'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", @@ -76082,7 +66372,7 @@ "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='choroplethmap'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", @@ -76090,7 +66380,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='choroplethmap'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", @@ -76101,13 +66391,13 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='choroplethmap'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='choroplethmap'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", @@ -76118,7 +66408,7 @@ "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='choroplethmap'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", @@ -76126,7 +66416,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='choroplethmap'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", @@ -76137,54 +66427,54 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='choroplethmap'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='choroplethmap'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='choroplethmap'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='choroplethmap'))" }, "reversescale": { "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.", "dflt": false, "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='choroplethmap'))" }, "zauto": { "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.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='choroplethmap'))" }, "zmax": { "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.", @@ -76192,20 +66482,20 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='choroplethmap'))" }, "zmid": { "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`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='choroplethmap'))" }, "zmin": { "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.", @@ -76213,16 +66503,58 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='choroplethmap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any", + "magic_underscores": "fig.update_traces(selectedpoints=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "selected": { + "editType": "plot", + "marker": { + "editType": "plot", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(selected_marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(selected_marker=dict(...), selector=dict(type='choroplethmap'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(selected=dict(...), selector=dict(type='choroplethmap'))" + }, + "unselected": { + "editType": "plot", + "marker": { + "editType": "plot", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number", + "magic_underscores": "fig.update_traces(unselected_marker_opacity=<VALUE>, selector=dict(type='choroplethmap'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(unselected_marker=dict(...), selector=dict(type='choroplethmap'))" + }, + "role": "object", + "magic_underscores": "fig.update_traces(unselected=dict(...), selector=dict(type='choroplethmap'))" }, "below": { - "description": "Determines if the densitymap trace will be inserted before the layer with the specified ID. By default, densitymap traces are placed below the first layer of type symbol If set to '', the layer will be inserted above every existing layer.", + "description": "Determines if the choropleth polygons will be inserted before the layer with the specified ID. By default, choroplethmap traces are placed above the water layers. If set to '', the layer will be inserted above every existing layer.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='choroplethmap'))" }, "hoverlabel": { "align": { @@ -76236,36 +66568,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='densitymap'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='choroplethmap'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='densitymap'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='densitymap'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='choroplethmap'))" }, "editType": "none", "font": { @@ -76273,12 +66590,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='densitymap'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='choroplethmap'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -76289,12 +66601,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='densitymap'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='choroplethmap'))" }, "lineposition": { "arrayOk": true, @@ -76310,12 +66617,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "shadow": { @@ -76324,24 +66626,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='densitymap'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='choroplethmap'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='densitymap'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='choroplethmap'))" }, "style": { "arrayOk": true, @@ -76353,12 +66645,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='densitymap'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='choroplethmap'))" }, "textcase": { "arrayOk": true, @@ -76372,12 +66659,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='densitymap'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='choroplethmap'))" }, "variant": { "arrayOk": true, @@ -76393,12 +66675,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='densitymap'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='choroplethmap'))" }, "weight": { "arrayOk": true, @@ -76412,14 +66689,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='densitymap'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='choroplethmap'))" }, "namelength": { "arrayOk": true, @@ -76428,12 +66700,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='densitymap'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='choroplethmap'))" }, "role": "object", "showarrow": { @@ -76441,66 +66708,45 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='choroplethmap'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='densitymap'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='densitymap'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='densitymap'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='choroplethmap'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='densitymap'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='choroplethmap'))" }, "categories": [ "map", "gl", + "noOpacity", "showLegend" ], "meta": { - "description": "Draws a bivariate kernel density estimation with a Gaussian kernel from `lon` and `lat` coordinates and optional `z` values using a colorscale.", - "hr_name": "density_map" + "description": "GeoJSON features to be filled are set in `geojson` The data that describes the choropleth value-to-color mapping is set in `locations` and `z`.", + "hr_name": "choropleth_map" }, - "type": "densitymap" + "type": "choroplethmap" }, - "densitymapbox": { + "densitymap": { "animatable": false, "attributes": { - "type": "densitymapbox", + "type": "densitymap", "name": { "description": "Sets the trace name. The trace name appears as the legend item and on hover.", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(name=<VALUE>, selector=dict(type='densitymap'))" }, "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(uid=<VALUE>, selector=dict(type='densitymap'))" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -76512,35 +66758,35 @@ false, "legendonly" ], - "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(visible=<VALUE>, selector=dict(type='densitymap'))" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", "dflt": false, "editType": "style", "valType": "boolean", - "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(showlegend=<VALUE>, selector=dict(type='densitymap'))" }, "legend": { "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", "dflt": "legend", "editType": "style", "valType": "subplotid", - "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legend=<VALUE>, selector=dict(type='densitymap'))" }, "legendrank": { "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", "dflt": 1000, "editType": "style", "valType": "number", - "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendrank=<VALUE>, selector=dict(type='densitymap'))" }, "legendgroup": { "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgroup=<VALUE>, selector=dict(type='densitymap'))" }, "legendgrouptitle": { "editType": "style", @@ -76548,7 +66794,7 @@ "color": { "editType": "style", "valType": "color", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_color=<VALUE>, selector=dict(type='densitymap'))" }, "description": "Sets this legend group's title font.", "editType": "style", @@ -76558,7 +66804,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_family=<VALUE>, selector=dict(type='densitymap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -76573,7 +66819,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "shadow": { @@ -76581,13 +66827,13 @@ "dflt": "none", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_shadow=<VALUE>, selector=dict(type='densitymap'))" }, "size": { "editType": "style", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_size=<VALUE>, selector=dict(type='densitymap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -76598,7 +66844,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_style=<VALUE>, selector=dict(type='densitymap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -76611,7 +66857,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_textcase=<VALUE>, selector=dict(type='densitymap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -76626,7 +66872,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_variant=<VALUE>, selector=dict(type='densitymap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -76639,9 +66885,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font_weight=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_font=dict(...), selector=dict(type='densitymap'))" }, "role": "object", "text": { @@ -76649,16 +66895,16 @@ "dflt": "", "editType": "style", "valType": "string", - "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle_text=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendgrouptitle=dict(...), selector=dict(type='densitymap'))" }, "legendwidth": { "description": "Sets the width (in px or fraction) of the legend for this trace.", "editType": "style", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(legendwidth=<VALUE>, selector=dict(type='densitymap'))" }, "opacity": { "description": "Sets the opacity of the trace.", @@ -76667,65 +66913,40 @@ "max": 1, "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(opacity=<VALUE>, selector=dict(type='densitymap'))" }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='densitymap'))" }, "z": { "description": "Sets the points' weight. For example, a value of 10 would be equivalent to having 10 points of weight 1 in the same spot", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='densitymap'))" }, "radius": { "arrayOk": true, - "description": "Sets the radius of influence of one `lon` / `lat` point in pixels. Increasing the value makes the densitymapbox trace smoother, but less detailed.", + "description": "Sets the radius of influence of one `lon` / `lat` point in pixels. Increasing the value makes the densitymap trace smoother, but less detailed.", "dflt": 30, "editType": "plot", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(radius=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "radiussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `radius`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(radius=<VALUE>, selector=dict(type='densitymap'))" }, "lat": { "description": "Sets the latitude coordinates (in degrees North).", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(lat=<VALUE>, selector=dict(type='densitymap'))" }, "lon": { "description": "Sets the longitude coordinates (in degrees East).", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(lon=<VALUE>, selector=dict(type='densitymap'))" }, "text": { "arrayOk": true, @@ -76733,12 +66954,7 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='densitymap'))" }, "hovertext": { "arrayOk": true, @@ -76746,16 +66962,11 @@ "dflt": "", "editType": "calc", "valType": "string", - "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='densitymap'))" }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -76771,12 +66982,7 @@ "name" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='densitymap'))" }, "hovertemplate": { "arrayOk": true, @@ -76784,49 +66990,34 @@ "dflt": "", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(hovertemplate=<VALUE>, selector=dict(type='densitymap'))" }, "hovertemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='densitymap'))" }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", "editType": "plot", "valType": "any", - "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='densitymap'))" }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", - "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='densitymap'))" }, "subplot": { - "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", - "dflt": "mapbox", + "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", + "dflt": "map", "editType": "calc", "valType": "subplotid", - "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(subplot=<VALUE>, selector=dict(type='densitymap'))" }, "coloraxis": { "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", @@ -76834,7 +67025,7 @@ "editType": "calc", "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", "valType": "subplotid", - "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(coloraxis=<VALUE>, selector=dict(type='densitymap'))" }, "colorbar": { "bgcolor": { @@ -76842,14 +67033,14 @@ "dflt": "rgba(0,0,0,0)", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_bgcolor=<VALUE>, selector=dict(type='densitymap'))" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_bordercolor=<VALUE>, selector=dict(type='densitymap'))" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", @@ -76857,17 +67048,17 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_borderwidth=<VALUE>, selector=dict(type='densitymap'))" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_dtick_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_dtick=<VALUE>, selector=dict(type='densitymap'))" }, "editType": "colorbars", "exponentformat": { @@ -76884,14 +67075,14 @@ "B", "SI extended" ], - "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_exponentformat=<VALUE>, selector=dict(type='densitymap'))" }, "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use \u22121 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, "editType": "colorbars", "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_labelalias=<VALUE>, selector=dict(type='densitymap'))" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", @@ -76899,7 +67090,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_len=<VALUE>, selector=dict(type='densitymap'))" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", @@ -76910,7 +67101,7 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_lenmode=<VALUE>, selector=dict(type='densitymap'))" }, "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", @@ -76918,7 +67109,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_minexponent=<VALUE>, selector=dict(type='densitymap'))" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", @@ -76926,7 +67117,7 @@ "editType": "colorbars", "min": 0, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_nticks=<VALUE>, selector=dict(type='densitymap'))" }, "orientation": { "description": "Sets the orientation of the colorbar.", @@ -76937,14 +67128,14 @@ "h", "v" ], - "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_orientation=<VALUE>, selector=dict(type='densitymap'))" }, "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_outlinecolor=<VALUE>, selector=dict(type='densitymap'))" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", @@ -76952,7 +67143,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_outlinewidth=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "separatethousands": { @@ -76960,7 +67151,7 @@ "dflt": false, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_separatethousands=<VALUE>, selector=dict(type='densitymap'))" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", @@ -76973,14 +67164,14 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_showexponent=<VALUE>, selector=dict(type='densitymap'))" }, "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, "editType": "colorbars", "valType": "boolean", - "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_showticklabels=<VALUE>, selector=dict(type='densitymap'))" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", @@ -76993,7 +67184,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_showtickprefix=<VALUE>, selector=dict(type='densitymap'))" }, "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", @@ -77006,7 +67197,7 @@ "last", "none" ], - "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_showticksuffix=<VALUE>, selector=dict(type='densitymap'))" }, "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", @@ -77014,7 +67205,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_thickness=<VALUE>, selector=dict(type='densitymap'))" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", @@ -77025,37 +67216,37 @@ "fraction", "pixels" ], - "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_thicknessmode=<VALUE>, selector=dict(type='densitymap'))" }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", "editType": "colorbars", "impliedEdits": { "tickmode": "linear", - "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tick0_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "any", - "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tick0=<VALUE>, selector=dict(type='densitymap'))" }, "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", "editType": "colorbars", "valType": "angle", - "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickangle=<VALUE>, selector=dict(type='densitymap'))" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickcolor=<VALUE>, selector=dict(type='densitymap'))" }, "tickfont": { "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_color=<VALUE>, selector=dict(type='densitymap'))" }, "description": "Sets the color bar's tick label font", "editType": "colorbars", @@ -77065,7 +67256,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_family=<VALUE>, selector=dict(type='densitymap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -77080,7 +67271,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_lineposition=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "shadow": { @@ -77088,13 +67279,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_shadow=<VALUE>, selector=dict(type='densitymap'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_size=<VALUE>, selector=dict(type='densitymap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -77105,7 +67296,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_style=<VALUE>, selector=dict(type='densitymap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -77118,7 +67309,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_textcase=<VALUE>, selector=dict(type='densitymap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -77133,7 +67324,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_variant=<VALUE>, selector=dict(type='densitymap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -77146,16 +67337,16 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont_weight=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickfont=dict(...), selector=dict(type='densitymap'))" }, "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickformat=<VALUE>, selector=dict(type='densitymap'))" }, "tickformatstops": { "items": { @@ -77202,7 +67393,7 @@ } }, "role": "object", - "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickformatstops=list(...), selector=dict(type='densitymap'))" }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", @@ -77213,7 +67404,7 @@ "hide past div", "hide past domain" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabeloverflow=<VALUE>, selector=dict(type='densitymap'))" }, "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", @@ -77232,7 +67423,7 @@ "outside bottom", "inside bottom" ], - "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelposition=<VALUE>, selector=dict(type='densitymap'))" }, "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", @@ -77240,7 +67431,7 @@ "editType": "colorbars", "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticklabelstep=<VALUE>, selector=dict(type='densitymap'))" }, "ticklen": { "description": "Sets the tick length (in px).", @@ -77248,13 +67439,13 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticklen=<VALUE>, selector=dict(type='densitymap'))" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", "editType": "colorbars", "impliedEdits": { - "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "enumerated", "values": [ @@ -77262,14 +67453,14 @@ "linear", "array" ], - "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickmode=<VALUE>, selector=dict(type='densitymap'))" }, "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickprefix=<VALUE>, selector=dict(type='densitymap'))" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", @@ -77281,36 +67472,26 @@ "inside", "" ], - "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticks=<VALUE>, selector=dict(type='densitymap'))" }, "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ticksuffix=<VALUE>, selector=dict(type='densitymap'))" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='densitymap'))" }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", - "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='densitymap'))" }, "tickwidth": { "description": "Sets the tick width (in px).", @@ -77318,7 +67499,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_tickwidth=<VALUE>, selector=dict(type='densitymap'))" }, "title": { "editType": "colorbars", @@ -77326,7 +67507,7 @@ "color": { "editType": "colorbars", "valType": "color", - "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_color=<VALUE>, selector=dict(type='densitymap'))" }, "description": "Sets this color bar's title font.", "editType": "colorbars", @@ -77336,7 +67517,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_family=<VALUE>, selector=dict(type='densitymap'))" }, "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -77351,7 +67532,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "shadow": { @@ -77359,13 +67540,13 @@ "dflt": "none", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_shadow=<VALUE>, selector=dict(type='densitymap'))" }, "size": { "editType": "colorbars", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_size=<VALUE>, selector=dict(type='densitymap'))" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -77376,7 +67557,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_style=<VALUE>, selector=dict(type='densitymap'))" }, "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -77389,7 +67570,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_textcase=<VALUE>, selector=dict(type='densitymap'))" }, "variant": { "description": "Sets the variant of the font.", @@ -77404,7 +67585,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_variant=<VALUE>, selector=dict(type='densitymap'))" }, "weight": { "description": "Sets the weight (or boldness) of the font.", @@ -77417,13 +67598,13 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font_weight=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_font=dict(...), selector=dict(type='densitymap'))" }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -77431,21 +67612,21 @@ "top", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_side=<VALUE>, selector=dict(type='densitymap'))" }, "text": { "description": "Sets the title of the color bar.", "editType": "colorbars", "valType": "string", - "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title_text=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_title=dict(...), selector=dict(type='densitymap'))" }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_x=<VALUE>, selector=dict(type='densitymap'))" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", @@ -77456,7 +67637,7 @@ "center", "right" ], - "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_xanchor=<VALUE>, selector=dict(type='densitymap'))" }, "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", @@ -77464,7 +67645,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_xpad=<VALUE>, selector=dict(type='densitymap'))" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", @@ -77475,13 +67656,13 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_xref=<VALUE>, selector=dict(type='densitymap'))" }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", "editType": "colorbars", "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_y=<VALUE>, selector=dict(type='densitymap'))" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", @@ -77492,7 +67673,7 @@ "middle", "bottom" ], - "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_yanchor=<VALUE>, selector=dict(type='densitymap'))" }, "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", @@ -77500,7 +67681,7 @@ "editType": "colorbars", "min": 0, "valType": "number", - "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_ypad=<VALUE>, selector=dict(type='densitymap'))" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", @@ -77511,54 +67692,54 @@ "container", "paper" ], - "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar_yref=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorbar=dict(...), selector=dict(type='densitymap'))" }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(autocolorscale_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='densitymap'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { "autocolorscale": false, - "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorscale_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "colorscale", - "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(colorscale=<VALUE>, selector=dict(type='densitymap'))" }, "showscale": { "description": "Determines whether or not a colorbar is displayed for this trace.", "dflt": true, "editType": "calc", "valType": "boolean", - "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(showscale=<VALUE>, selector=dict(type='densitymap'))" }, "reversescale": { "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.", "dflt": false, "editType": "plot", "valType": "boolean", - "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(reversescale=<VALUE>, selector=dict(type='densitymap'))" }, "zauto": { "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.", "dflt": true, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zauto_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "boolean", - "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zauto=<VALUE>, selector=dict(type='densitymap'))" }, "zmax": { "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.", @@ -77566,20 +67747,20 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmax_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmax=<VALUE>, selector=dict(type='densitymap'))" }, "zmid": { "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`.", "dflt": null, "editType": "calc", "impliedEdits": { - "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmid_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmid=<VALUE>, selector=dict(type='densitymap'))" }, "zmin": { "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.", @@ -77587,16 +67768,16 @@ "editType": "calc", "impliedEdits": { "zauto": false, - "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmin_impliedEdits=<VALUE>, selector=dict(type='densitymap'))" }, "valType": "number", - "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(zmin=<VALUE>, selector=dict(type='densitymap'))" }, "below": { - "description": "Determines if the densitymapbox trace will be inserted before the layer with the specified ID. By default, densitymapbox traces are placed below the first layer of type symbol If set to '', the layer will be inserted above every existing layer.", + "description": "Determines if the densitymap trace will be inserted before the layer with the specified ID. By default, densitymap traces are placed below the first layer of type symbol If set to '', the layer will be inserted above every existing layer.", "editType": "plot", "valType": "string", - "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(below=<VALUE>, selector=dict(type='densitymap'))" }, "hoverlabel": { "align": { @@ -77610,36 +67791,21 @@ "right", "auto" ], - "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='densitymap'))" }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='densitymap'))" }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='densitymap'))" }, "editType": "none", "font": { @@ -77647,12 +67813,7 @@ "arrayOk": true, "editType": "none", "valType": "color", - "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='densitymap'))" }, "description": "Sets the font used in hover labels.", "editType": "none", @@ -77663,12 +67824,7 @@ "noBlank": true, "strict": true, "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='densitymap'))" }, "lineposition": { "arrayOk": true, @@ -77684,12 +67840,7 @@ "through" ], "valType": "flaglist", - "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "shadow": { @@ -77698,24 +67849,14 @@ "dflt": "none", "editType": "none", "valType": "string", - "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='densitymap'))" }, "size": { "arrayOk": true, "editType": "none", "min": 1, "valType": "number", - "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='densitymap'))" }, "style": { "arrayOk": true, @@ -77727,12 +67868,7 @@ "normal", "italic" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='densitymap'))" }, "textcase": { "arrayOk": true, @@ -77746,12 +67882,7 @@ "upper", "lower" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='densitymap'))" }, "variant": { "arrayOk": true, @@ -77767,12 +67898,7 @@ "petite-caps", "unicase" ], - "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='densitymap'))" }, "weight": { "arrayOk": true, @@ -77786,14 +67912,9 @@ "max": 1000, "min": 1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='densitymap'))" }, "namelength": { "arrayOk": true, @@ -77802,12 +67923,7 @@ "editType": "none", "min": -1, "valType": "integer", - "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" + "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='densitymap'))" }, "role": "object", "showarrow": { @@ -77815,50 +67931,28 @@ "dflt": true, "editType": "none", "valType": "boolean", - "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel_showarrow=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(hoverlabel=dict(...), selector=dict(type='densitymap'))" }, "uirevision": { "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", "editType": "none", "valType": "any", - "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='densitymapbox'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='densitymap'))" }, - "magic_underscores": "fig.update_traces(..., selector=dict(type='densitymapbox'))" + "magic_underscores": "fig.update_traces(..., selector=dict(type='densitymap'))" }, "categories": [ - "mapbox", + "map", "gl", "showLegend" ], "meta": { - "description": "*densitymapbox* trace is deprecated! Please consider switching to the *densitymap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Draws a bivariate kernel density estimation with a Gaussian kernel from `lon` and `lat` coordinates and optional `z` values using a colorscale.", - "hr_name": "density_mapbox" + "description": "Draws a bivariate kernel density estimation with a Gaussian kernel from `lon` and `lat` coordinates and optional `z` values using a colorscale.", + "hr_name": "density_map" }, - "type": "densitymapbox" + "type": "densitymap" }, "scatterpolar": { "animatable": false, @@ -78063,22 +68157,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatterpolar'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "r": { "description": "Sets the radial coordinates", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(r=<VALUE>, selector=dict(type='scatterpolar'))" }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, "r0": { "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", "dflt": 0, @@ -78099,11 +68183,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(theta=<VALUE>, selector=dict(type='scatterpolar'))" }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, "theta0": { "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", "dflt": 0, @@ -78137,11 +68216,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatterpolar'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -78161,11 +68235,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatterpolar'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", @@ -78181,11 +68250,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatterpolar'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -78194,14 +68258,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatterpolar'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -78218,11 +68277,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatterpolar'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -78238,11 +68292,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatterpolar'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -78250,22 +68299,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatterpolar'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatterpolar'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", "dflt": "polar", @@ -78293,11 +68332,6 @@ ], "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scatterpolar'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -78825,22 +68859,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatterpolar'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatterpolar'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -78952,7 +68976,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -79045,7 +69069,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatterpolar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -79055,11 +69079,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatterpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "gradient": { "color": { @@ -79069,11 +69088,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scatterpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "type": { @@ -79090,11 +69104,6 @@ ], "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scatterpolar'))" }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scatterpolar'))" }, "line": { @@ -79166,7 +69175,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatterpolar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -79176,11 +69185,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatterpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "dash": { "arrayOk": true, "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*).", @@ -79197,11 +69201,6 @@ ], "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scatterpolar'))" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -79219,11 +69218,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatterpolar'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatterpolar'))" }, "maxdisplayed": { @@ -79243,11 +69237,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatterpolar'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -79298,11 +69287,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatterpolar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "standoff": { "arrayOk": true, "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", @@ -79312,11 +69296,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scatterpolar'))" }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -79813,11 +69792,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatterpolar'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatterpolar'))" }, "line": { @@ -79830,11 +69804,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(line_backoff=<VALUE>, selector=dict(type='scatterpolar'))" }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the line color.", "editType": "style", @@ -79895,11 +69864,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatterpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -79911,11 +69875,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatterpolar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -79932,11 +69891,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scatterpolar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -79946,11 +69900,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scatterpolar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -79958,11 +69907,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatterpolar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -79975,11 +69919,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatterpolar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -79994,11 +69933,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scatterpolar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -80015,11 +69949,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatterpolar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -80034,11 +69963,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatterpolar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatterpolar'))" }, "selectedpoints": { @@ -80177,11 +70101,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatterpolar'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -80189,11 +70108,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatterpolar'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -80201,11 +70115,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatterpolar'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -80214,11 +70123,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatterpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -80230,11 +70134,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatterpolar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -80251,11 +70150,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatterpolar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -80265,11 +70159,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatterpolar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -80277,11 +70166,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatterpolar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -80294,11 +70178,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatterpolar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -80313,11 +70192,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatterpolar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -80334,11 +70208,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatterpolar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -80353,11 +70222,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatterpolar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatterpolar'))" }, "namelength": { @@ -80369,11 +70233,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatterpolar'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -80400,28 +70259,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatterpolar'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scatterpolar'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scatterpolar'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scatterpolar'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scatterpolar'))" }, "categories": [ @@ -80639,22 +70476,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "r": { "description": "Sets the radial coordinates", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(r=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, "r0": { "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", "dflt": 0, @@ -80675,11 +70502,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(theta=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, "theta0": { "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", "dflt": 0, @@ -80713,11 +70535,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -80737,11 +70554,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", @@ -80757,11 +70569,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -80770,14 +70577,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -80794,11 +70596,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -80814,11 +70611,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -80826,22 +70618,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", "dflt": "polar", @@ -80858,11 +70640,6 @@ "valType": "angle", "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -81390,22 +71167,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -81517,7 +71284,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "calc", "valType": "enumerated", "values": [ @@ -81610,7 +71377,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatterpolargl'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -81620,11 +71387,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "autocolorscale": { @@ -81695,7 +71457,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatterpolargl'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -81705,11 +71467,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -81727,11 +71484,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatterpolargl'))" }, "opacity": { @@ -81743,11 +71495,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -81798,11 +71545,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -82299,11 +72041,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatterpolargl'))" }, "line": { @@ -82347,11 +72084,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -82363,11 +72095,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "role": "object", "size": { "arrayOk": true, @@ -82376,11 +72103,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -82393,11 +72115,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -82410,11 +72127,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -82427,11 +72139,6 @@ ], "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatterpolargl'))" }, "selectedpoints": { @@ -82567,11 +72274,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -82579,11 +72281,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -82591,11 +72288,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -82604,11 +72296,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -82620,11 +72307,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -82641,11 +72323,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -82655,11 +72332,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -82667,11 +72339,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -82684,11 +72351,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -82703,11 +72365,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -82724,11 +72381,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -82743,11 +72395,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatterpolargl'))" }, "namelength": { @@ -82759,11 +72406,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -82780,28 +72422,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatterpolargl'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scatterpolargl'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scatterpolargl'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scatterpolargl'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scatterpolargl'))" }, "categories": [ @@ -83007,11 +72627,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='barpolar'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "base": { "arrayOk": true, "description": "Sets where the bar base is drawn (in radial axis units). In *stack* barmode, traces that set *base* will be excluded and drawn in *overlay* mode instead.", @@ -83020,22 +72635,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(base=<VALUE>, selector=dict(type='barpolar'))" }, - "basesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `base`.", - "editType": "none", - "valType": "string" - }, "r": { "description": "Sets the radial coordinates", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(r=<VALUE>, selector=dict(type='barpolar'))" }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, "r0": { "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", "dflt": 0, @@ -83056,11 +72661,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(theta=<VALUE>, selector=dict(type='barpolar'))" }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, "theta0": { "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", "dflt": 0, @@ -83095,11 +72695,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(width=<VALUE>, selector=dict(type='barpolar'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "offset": { "arrayOk": true, "description": "Shifts the angular position where the bar is drawn (in *thetatunit* units).", @@ -83108,11 +72703,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(offset=<VALUE>, selector=dict(type='barpolar'))" }, - "offsetsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `offset`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, "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.", @@ -83121,11 +72711,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='barpolar'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Same as `text`.", @@ -83134,14 +72719,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='barpolar'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -83158,11 +72738,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='barpolar'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -83178,11 +72753,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='barpolar'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -83190,22 +72760,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='barpolar'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='barpolar'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", "dflt": "polar", @@ -83741,22 +73301,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='barpolar'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='barpolar'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -83868,7 +73418,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -83961,7 +73511,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='barpolar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -83971,11 +73521,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='barpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "autocolorscale": { @@ -84046,7 +73591,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='barpolar'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -84056,11 +73601,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='barpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -84079,11 +73619,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='barpolar'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='barpolar'))" }, "opacity": { @@ -84096,11 +73631,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='barpolar'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "pattern": { "bgcolor": { "arrayOk": true, @@ -84109,11 +73639,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='barpolar'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -84123,11 +73648,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='barpolar'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -84154,11 +73674,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='barpolar'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -84178,11 +73693,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='barpolar'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -84192,11 +73702,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='barpolar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -84207,11 +73712,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='barpolar'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='barpolar'))" }, "reversescale": { @@ -84321,11 +73821,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='barpolar'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -84333,11 +73828,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='barpolar'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -84345,11 +73835,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='barpolar'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -84358,11 +73843,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='barpolar'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -84374,11 +73854,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='barpolar'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -84395,11 +73870,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='barpolar'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -84409,11 +73879,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='barpolar'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -84421,11 +73886,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='barpolar'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -84438,11 +73898,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='barpolar'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -84457,11 +73912,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='barpolar'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -84478,11 +73928,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='barpolar'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -84497,11 +73942,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='barpolar'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='barpolar'))" }, "namelength": { @@ -84513,11 +73953,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='barpolar'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -84534,28 +73969,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='barpolar'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='barpolar'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='barpolar'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='barpolar'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='barpolar'))" }, "categories": [ @@ -84793,57 +74206,32 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scatterternary'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "a": { "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(a=<VALUE>, selector=dict(type='scatterternary'))" }, - "asrc": { - "description": "Sets the source reference on Chart Studio Cloud for `a`.", - "editType": "none", - "valType": "string" - }, "b": { "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(b=<VALUE>, selector=dict(type='scatterternary'))" }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, "c": { "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(c=<VALUE>, selector=dict(type='scatterternary'))" }, - "csrc": { - "description": "Sets the source reference on Chart Studio Cloud for `c`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "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 data points in (a,b,c). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scatterternary'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -84863,11 +74251,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scatterternary'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `a`, `b`, `c` and `text`.", @@ -84883,27 +74266,17 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scatterternary'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). To be seen, trace `hoverinfo` must contain a *text* flag.", + "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 data points in (a,b,c). To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", "editType": "style", "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scatterternary'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -84921,11 +74294,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scatterternary'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -84941,11 +74309,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scatterternary'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -84953,22 +74316,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scatterternary'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scatterternary'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a ternary subplot. If *ternary* (the default value), the data refer to `layout.ternary`. If *ternary2*, the data refer to `layout.ternary2`, and so on.", "dflt": "ternary", @@ -84996,11 +74349,6 @@ ], "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scatterternary'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -85528,22 +74876,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scatterternary'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scatterternary'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -85655,7 +74993,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -85748,7 +75086,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scatterternary'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -85758,11 +75096,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scatterternary'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "gradient": { "color": { @@ -85772,11 +75105,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scatterternary'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "type": { @@ -85793,11 +75121,6 @@ ], "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scatterternary'))" }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scatterternary'))" }, "line": { @@ -85869,7 +75192,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scatterternary'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -85879,11 +75202,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scatterternary'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "dash": { "arrayOk": true, "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*).", @@ -85900,11 +75218,6 @@ ], "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scatterternary'))" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -85922,11 +75235,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scatterternary'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scatterternary'))" }, "maxdisplayed": { @@ -85946,11 +75254,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scatterternary'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -86001,11 +75304,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scatterternary'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "standoff": { "arrayOk": true, "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", @@ -86015,11 +75313,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scatterternary'))" }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -86516,11 +75809,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scatterternary'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scatterternary'))" }, "line": { @@ -86533,11 +75821,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(line_backoff=<VALUE>, selector=dict(type='scatterternary'))" }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the line color.", "editType": "style", @@ -86598,11 +75881,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scatterternary'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -86614,11 +75892,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scatterternary'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -86635,11 +75908,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scatterternary'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -86649,11 +75917,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scatterternary'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -86661,11 +75924,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scatterternary'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -86678,11 +75936,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scatterternary'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -86697,11 +75950,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scatterternary'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -86718,11 +75966,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scatterternary'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -86737,11 +75980,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scatterternary'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scatterternary'))" }, "selectedpoints": { @@ -86880,11 +76118,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scatterternary'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -86892,11 +76125,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scatterternary'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -86904,11 +76132,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scatterternary'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -86917,11 +76140,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scatterternary'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -86933,11 +76151,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scatterternary'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -86954,11 +76167,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scatterternary'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -86968,11 +76176,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scatterternary'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -86980,11 +76183,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scatterternary'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -86997,11 +76195,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scatterternary'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -87016,11 +76209,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scatterternary'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -87037,11 +76225,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scatterternary'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -87056,11 +76239,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scatterternary'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scatterternary'))" }, "namelength": { @@ -87072,11 +76250,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scatterternary'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -87111,28 +76284,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scatterternary'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scatterternary'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scatterternary'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scatterternary'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scatterternary'))" }, "categories": [ @@ -87350,33 +76501,18 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattersmith'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "imag": { "description": "Sets the imaginary component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(imag=<VALUE>, selector=dict(type='scattersmith'))" }, - "imagsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `imag`.", - "editType": "none", - "valType": "string" - }, "real": { "description": "Sets the real component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(real=<VALUE>, selector=dict(type='scattersmith'))" }, - "realsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `real`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", @@ -87385,11 +76521,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattersmith'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -87409,11 +76540,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattersmith'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `real`, `imag` and `text`.", @@ -87429,11 +76555,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattersmith'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -87442,14 +76563,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattersmith'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -87466,11 +76582,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattersmith'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -87486,11 +76597,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattersmith'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -87498,22 +76604,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattersmith'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattersmith'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "subplot": { "description": "Sets a reference between this trace's data coordinates and a smith subplot. If *smith* (the default value), the data refer to `layout.smith`. If *smith2*, the data refer to `layout.smith2`, and so on.", "dflt": "smith", @@ -87541,11 +76637,6 @@ ], "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scattersmith'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -88073,22 +77164,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattersmith'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattersmith'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -88200,7 +77281,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -88293,7 +77374,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattersmith'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -88303,11 +77384,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattersmith'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "gradient": { "color": { @@ -88317,11 +77393,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scattersmith'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "type": { @@ -88338,11 +77409,6 @@ ], "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scattersmith'))" }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scattersmith'))" }, "line": { @@ -88414,7 +77480,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scattersmith'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -88424,11 +77490,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scattersmith'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "dash": { "arrayOk": true, "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*).", @@ -88445,11 +77506,6 @@ ], "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scattersmith'))" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -88467,11 +77523,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scattersmith'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scattersmith'))" }, "maxdisplayed": { @@ -88491,11 +77542,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattersmith'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -88546,11 +77592,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattersmith'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "standoff": { "arrayOk": true, "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", @@ -88560,11 +77601,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scattersmith'))" }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -89061,11 +78097,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattersmith'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattersmith'))" }, "line": { @@ -89078,11 +78109,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(line_backoff=<VALUE>, selector=dict(type='scattersmith'))" }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the line color.", "editType": "style", @@ -89143,11 +78169,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattersmith'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -89159,11 +78180,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattersmith'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -89180,11 +78196,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scattersmith'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -89194,11 +78205,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scattersmith'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -89206,11 +78212,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattersmith'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -89223,11 +78224,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattersmith'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -89242,11 +78238,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scattersmith'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -89263,11 +78254,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scattersmith'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -89282,11 +78268,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattersmith'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattersmith'))" }, "selectedpoints": { @@ -89425,11 +78406,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattersmith'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -89437,11 +78413,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattersmith'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -89449,11 +78420,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattersmith'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -89462,11 +78428,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattersmith'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -89478,11 +78439,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattersmith'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -89499,11 +78455,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattersmith'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -89513,11 +78464,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattersmith'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -89525,11 +78471,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattersmith'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -89542,11 +78483,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattersmith'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -89561,11 +78497,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattersmith'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -89582,11 +78513,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattersmith'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -89601,11 +78527,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattersmith'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattersmith'))" }, "namelength": { @@ -89617,11 +78538,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattersmith'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -89648,28 +78564,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattersmith'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattersmith'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattersmith'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattersmith'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scattersmith'))" }, "categories": [ @@ -89861,55 +78755,30 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='sunburst'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "parents": { "description": "Sets the parent sectors for each of the sectors. Empty string items '' are understood to reference the root node in the hierarchy. If `ids` is filled, `parents` items are understood to be \"ids\" themselves. When `ids` is not set, plotly attempts to find matching items in `labels`, but beware they must be unique.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(parents=<VALUE>, selector=dict(type='sunburst'))" }, - "parentssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `parents`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Sets the values associated with each of the sectors. Use with `branchvalues` to determine how the values are summed.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='sunburst'))" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "labels": { "description": "Sets the labels of each of the sectors.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='sunburst'))" }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='sunburst'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `currentPath`, `root`, `entry`, `percentRoot`, `percentEntry`, `percentParent`, `label` and `value`.", @@ -89925,11 +78794,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='sunburst'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -89938,14 +78802,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='sunburst'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. Flags are rendered in a fixed order; use `hovertemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "dflt": "label+text+value+name", "editType": "none", "extras": [ @@ -89966,11 +78825,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='sunburst'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `currentPath`, `root`, `entry`, `percentRoot`, `percentEntry` and `percentParent`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -89986,11 +78840,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='sunburst'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -89998,25 +78847,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='sunburst'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='sunburst'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this sunburst trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this sunburst trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -90026,7 +78865,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this sunburst trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this sunburst trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -90604,22 +79443,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='sunburst'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='sunburst'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -90731,7 +79560,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -90830,7 +79659,7 @@ "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='sunburst'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -90840,11 +79669,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='sunburst'))" }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "color": { @@ -90855,11 +79679,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='sunburst'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -90871,11 +79690,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='sunburst'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='sunburst'))" }, "pattern": { @@ -90886,11 +79700,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='sunburst'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -90900,11 +79709,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='sunburst'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -90931,11 +79735,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='sunburst'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -90955,11 +79754,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='sunburst'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -90969,11 +79763,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='sunburst'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -90984,11 +79773,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='sunburst'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='sunburst'))" }, "reversescale": { @@ -91015,11 +79799,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='sunburst'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo`.", "editType": "plot", "family": { @@ -91031,11 +79810,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='sunburst'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -91052,11 +79826,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='sunburst'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -91066,11 +79835,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='sunburst'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -91078,11 +79842,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='sunburst'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -91095,11 +79854,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='sunburst'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -91114,11 +79868,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='sunburst'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -91135,11 +79884,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='sunburst'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -91154,15 +79898,10 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='sunburst'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='sunburst'))" }, "textinfo": { - "description": "Determines which trace information appear on the graph.", + "description": "Determines what trace information appears on the graph. Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "editType": "plot", "extras": [ "none" @@ -91215,11 +79954,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='sunburst'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -91227,11 +79961,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='sunburst'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -91239,11 +79968,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='sunburst'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -91252,11 +79976,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='sunburst'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -91268,11 +79987,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='sunburst'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -91289,11 +80003,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='sunburst'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -91303,11 +80012,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='sunburst'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -91315,11 +80019,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='sunburst'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -91332,11 +80031,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='sunburst'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -91351,11 +80045,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='sunburst'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -91372,11 +80061,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='sunburst'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -91391,11 +80075,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='sunburst'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='sunburst'))" }, "namelength": { @@ -91407,11 +80086,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='sunburst'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -91429,11 +80103,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='sunburst'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying inside the sector.", "editType": "plot", "family": { @@ -91445,11 +80114,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='sunburst'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -91466,11 +80130,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='sunburst'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -91480,11 +80139,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='sunburst'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -91492,11 +80146,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='sunburst'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -91509,11 +80158,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='sunburst'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -91528,11 +80172,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='sunburst'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -91549,11 +80188,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='sunburst'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -91568,11 +80202,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='sunburst'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='sunburst'))" }, "insidetextorientation": { @@ -91595,11 +80224,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='sunburst'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying outside the sector. This option refers to the root of the hierarchy presented at the center of a sunburst graph. Please note that if a hierarchy has multiple root nodes, this option won't have any effect and `insidetextfont` would be used.", "editType": "plot", "family": { @@ -91611,11 +80235,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='sunburst'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -91632,11 +80251,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='sunburst'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -91646,11 +80260,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='sunburst'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -91658,11 +80267,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='sunburst'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -91675,11 +80279,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='sunburst'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -91694,11 +80293,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='sunburst'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -91715,11 +80309,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='sunburst'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -91734,11 +80323,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='sunburst'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='sunburst'))" }, "root": { @@ -91800,28 +80384,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='sunburst'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='sunburst'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='sunburst'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='sunburst'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='sunburst'))" }, "categories": [], @@ -92020,55 +80582,30 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='treemap'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "parents": { "description": "Sets the parent sectors for each of the sectors. Empty string items '' are understood to reference the root node in the hierarchy. If `ids` is filled, `parents` items are understood to be \"ids\" themselves. When `ids` is not set, plotly attempts to find matching items in `labels`, but beware they must be unique.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(parents=<VALUE>, selector=dict(type='treemap'))" }, - "parentssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `parents`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Sets the values associated with each of the sectors. Use with `branchvalues` to determine how the values are summed.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='treemap'))" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "labels": { "description": "Sets the labels of each of the sectors.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='treemap'))" }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='treemap'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "description": "Sets the positions of the `text` elements.", "dflt": "top left", @@ -92102,11 +80639,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='treemap'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -92115,14 +80647,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='treemap'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. Flags are rendered in a fixed order; use `hovertemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "dflt": "label+text+value+name", "editType": "none", "extras": [ @@ -92143,11 +80670,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='treemap'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `currentPath`, `root`, `entry`, `percentRoot`, `percentEntry` and `percentParent`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -92163,11 +80685,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='treemap'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -92175,25 +80692,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='treemap'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='treemap'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this treemap trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this treemap trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -92203,7 +80710,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this treemap trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this treemap trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -92781,22 +81288,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='treemap'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='treemap'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -92908,7 +81405,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -93007,7 +81504,7 @@ "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='treemap'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -93017,11 +81514,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='treemap'))" }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" - }, "cornerradius": { "description": "Sets the maximum rounding of corners (in px).", "dflt": 0, @@ -93051,11 +81543,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -93067,11 +81554,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='treemap'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='treemap'))" }, "pad": { @@ -93115,11 +81597,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='treemap'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -93129,11 +81606,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='treemap'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -93160,11 +81632,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='treemap'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -93184,11 +81651,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='treemap'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -93198,11 +81660,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -93213,11 +81670,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='treemap'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='treemap'))" }, "reversescale": { @@ -93244,11 +81696,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo`.", "editType": "plot", "family": { @@ -93260,11 +81707,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='treemap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -93281,11 +81723,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='treemap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -93295,11 +81732,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='treemap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -93307,11 +81739,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -93324,11 +81751,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='treemap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -93343,11 +81765,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='treemap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -93364,11 +81781,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='treemap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -93383,15 +81795,10 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='treemap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='treemap'))" }, "textinfo": { - "description": "Determines which trace information appear on the graph.", + "description": "Determines what trace information appears on the graph. Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "editType": "plot", "extras": [ "none" @@ -93495,7 +81902,7 @@ "editType": "calc", "role": "object", "side": { - "description": "Determines on which side of the the treemap the `pathbar` should be presented.", + "description": "Determines on which side of the treemap the `pathbar` should be presented.", "dflt": "top", "editType": "plot", "valType": "enumerated", @@ -93512,11 +81919,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(pathbar_textfont_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used inside `pathbar`.", "editType": "plot", "family": { @@ -93528,11 +81930,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(pathbar_textfont_family=<VALUE>, selector=dict(type='treemap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -93549,11 +81946,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(pathbar_textfont_lineposition=<VALUE>, selector=dict(type='treemap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -93563,11 +81955,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(pathbar_textfont_shadow=<VALUE>, selector=dict(type='treemap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -93575,11 +81962,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(pathbar_textfont_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -93592,11 +81974,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_style=<VALUE>, selector=dict(type='treemap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -93611,11 +81988,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_textcase=<VALUE>, selector=dict(type='treemap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -93632,11 +82004,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_variant=<VALUE>, selector=dict(type='treemap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -93651,11 +82018,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(pathbar_textfont_weight=<VALUE>, selector=dict(type='treemap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(pathbar_textfont=dict(...), selector=dict(type='treemap'))" }, "thickness": { @@ -93688,11 +82050,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='treemap'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -93700,11 +82057,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='treemap'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -93712,11 +82064,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='treemap'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -93725,11 +82072,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -93741,11 +82083,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='treemap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -93762,11 +82099,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='treemap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -93776,11 +82108,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='treemap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -93788,11 +82115,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -93805,11 +82127,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='treemap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -93824,11 +82141,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='treemap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -93845,11 +82157,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='treemap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -93864,11 +82171,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='treemap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='treemap'))" }, "namelength": { @@ -93880,11 +82182,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='treemap'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -93902,11 +82199,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying inside the sector.", "editType": "plot", "family": { @@ -93918,11 +82210,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='treemap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -93939,11 +82226,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='treemap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -93953,11 +82235,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='treemap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -93965,11 +82242,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -93982,11 +82254,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='treemap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -94001,11 +82268,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='treemap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -94022,11 +82284,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='treemap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -94041,11 +82298,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='treemap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='treemap'))" }, "outsidetextfont": { @@ -94055,11 +82307,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='treemap'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying outside the sector. This option refers to the root of the hierarchy presented on top left corner of a treemap graph. Please note that if a hierarchy has multiple root nodes, this option won't have any effect and `insidetextfont` would be used.", "editType": "plot", "family": { @@ -94071,11 +82318,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='treemap'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -94092,11 +82334,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='treemap'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -94106,11 +82343,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='treemap'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -94118,11 +82350,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='treemap'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -94135,11 +82362,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='treemap'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -94154,11 +82376,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='treemap'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -94175,11 +82392,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='treemap'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -94194,11 +82406,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='treemap'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='treemap'))" }, "root": { @@ -94240,28 +82447,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='treemap'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='treemap'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='treemap'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='treemap'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='treemap'))" }, "categories": [], @@ -94460,55 +82645,30 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='icicle'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "parents": { "description": "Sets the parent sectors for each of the sectors. Empty string items '' are understood to reference the root node in the hierarchy. If `ids` is filled, `parents` items are understood to be \"ids\" themselves. When `ids` is not set, plotly attempts to find matching items in `labels`, but beware they must be unique.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(parents=<VALUE>, selector=dict(type='icicle'))" }, - "parentssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `parents`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Sets the values associated with each of the sectors. Use with `branchvalues` to determine how the values are summed.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(values=<VALUE>, selector=dict(type='icicle'))" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "labels": { "description": "Sets the labels of each of the sectors.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(labels=<VALUE>, selector=dict(type='icicle'))" }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, "text": { "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "editType": "plot", "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='icicle'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "description": "Sets the positions of the `text` elements.", "dflt": "top left", @@ -94542,11 +82702,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='icicle'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", @@ -94555,14 +82710,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='icicle'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. Flags are rendered in a fixed order; use `hovertemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "dflt": "label+text+value+name", "editType": "none", "extras": [ @@ -94583,11 +82733,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='icicle'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `currentPath`, `root`, `entry`, `percentRoot`, `percentEntry` and `percentParent`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -94603,11 +82748,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='icicle'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -94615,25 +82755,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='icicle'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='icicle'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this icicle trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this icicle trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -94643,7 +82773,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this icicle trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this icicle trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -95221,22 +83351,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='icicle'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='icicle'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -95348,7 +83468,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -95447,7 +83567,7 @@ "magic_underscores": "fig.update_traces(marker_colors=<VALUE>, selector=dict(type='icicle'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. Has an effect only if colors is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -95457,11 +83577,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='icicle'))" }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "color": { @@ -95472,11 +83587,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_line_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -95488,11 +83598,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='icicle'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='icicle'))" }, "pattern": { @@ -95503,11 +83608,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_bgcolor=<VALUE>, selector=dict(type='icicle'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the pattern within the marker.", "editType": "style", "fgcolor": { @@ -95517,11 +83617,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_pattern_fgcolor=<VALUE>, selector=dict(type='icicle'))" }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, "fgopacity": { "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", "editType": "style", @@ -95548,11 +83643,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(marker_pattern_path=<VALUE>, selector=dict(type='icicle'))" }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shape": { "arrayOk": true, @@ -95572,11 +83662,6 @@ ], "magic_underscores": "fig.update_traces(marker_pattern_shape=<VALUE>, selector=dict(type='icicle'))" }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", @@ -95586,11 +83671,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "solidity": { "arrayOk": true, "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", @@ -95601,11 +83681,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_pattern_solidity=<VALUE>, selector=dict(type='icicle'))" }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_pattern=dict(...), selector=dict(type='icicle'))" }, "reversescale": { @@ -95632,11 +83707,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo`.", "editType": "plot", "family": { @@ -95648,11 +83718,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='icicle'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -95669,11 +83734,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='icicle'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -95683,11 +83743,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='icicle'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -95695,11 +83750,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -95712,11 +83762,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='icicle'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -95731,11 +83776,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='icicle'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -95752,11 +83792,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='icicle'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -95771,15 +83806,10 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='icicle'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='icicle'))" }, "textinfo": { - "description": "Determines which trace information appear on the graph.", + "description": "Determines what trace information appears on the graph. Flags are rendered in a fixed order; use `texttemplate` if you need explicit control over the rendered string, including the order of fields and surrounding text.", "editType": "plot", "extras": [ "none" @@ -95871,7 +83901,7 @@ "editType": "calc", "role": "object", "side": { - "description": "Determines on which side of the the treemap the `pathbar` should be presented.", + "description": "Determines on which side of the treemap the `pathbar` should be presented.", "dflt": "top", "editType": "plot", "valType": "enumerated", @@ -95888,11 +83918,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(pathbar_textfont_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used inside `pathbar`.", "editType": "plot", "family": { @@ -95904,11 +83929,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(pathbar_textfont_family=<VALUE>, selector=dict(type='icicle'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -95925,11 +83945,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(pathbar_textfont_lineposition=<VALUE>, selector=dict(type='icicle'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -95939,11 +83954,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(pathbar_textfont_shadow=<VALUE>, selector=dict(type='icicle'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -95951,11 +83961,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(pathbar_textfont_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -95968,11 +83973,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_style=<VALUE>, selector=dict(type='icicle'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -95987,11 +83987,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_textcase=<VALUE>, selector=dict(type='icicle'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -96008,11 +84003,6 @@ ], "magic_underscores": "fig.update_traces(pathbar_textfont_variant=<VALUE>, selector=dict(type='icicle'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -96027,11 +84017,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(pathbar_textfont_weight=<VALUE>, selector=dict(type='icicle'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(pathbar_textfont=dict(...), selector=dict(type='icicle'))" }, "thickness": { @@ -96064,11 +84049,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='icicle'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -96076,11 +84056,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='icicle'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -96088,11 +84063,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='icicle'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -96101,11 +84071,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -96117,11 +84082,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='icicle'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -96138,11 +84098,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='icicle'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -96152,11 +84107,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='icicle'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -96164,11 +84114,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -96181,11 +84126,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='icicle'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -96200,11 +84140,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='icicle'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -96221,11 +84156,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='icicle'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -96240,11 +84170,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='icicle'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='icicle'))" }, "namelength": { @@ -96256,11 +84181,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='icicle'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -96278,11 +84198,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(insidetextfont_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying inside the sector.", "editType": "plot", "family": { @@ -96294,11 +84209,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_family=<VALUE>, selector=dict(type='icicle'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -96315,11 +84225,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(insidetextfont_lineposition=<VALUE>, selector=dict(type='icicle'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -96329,11 +84234,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(insidetextfont_shadow=<VALUE>, selector=dict(type='icicle'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -96341,11 +84241,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(insidetextfont_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -96358,11 +84253,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_style=<VALUE>, selector=dict(type='icicle'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -96377,11 +84267,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_textcase=<VALUE>, selector=dict(type='icicle'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -96398,11 +84283,6 @@ ], "magic_underscores": "fig.update_traces(insidetextfont_variant=<VALUE>, selector=dict(type='icicle'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -96417,11 +84297,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(insidetextfont_weight=<VALUE>, selector=dict(type='icicle'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(insidetextfont=dict(...), selector=dict(type='icicle'))" }, "outsidetextfont": { @@ -96431,11 +84306,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(outsidetextfont_color=<VALUE>, selector=dict(type='icicle'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used for `textinfo` lying outside the sector. This option refers to the root of the hierarchy presented on top left corner of a treemap graph. Please note that if a hierarchy has multiple root nodes, this option won't have any effect and `insidetextfont` would be used.", "editType": "plot", "family": { @@ -96447,11 +84317,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_family=<VALUE>, selector=dict(type='icicle'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -96468,11 +84333,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(outsidetextfont_lineposition=<VALUE>, selector=dict(type='icicle'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -96482,11 +84342,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(outsidetextfont_shadow=<VALUE>, selector=dict(type='icicle'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "plot", @@ -96494,11 +84349,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(outsidetextfont_size=<VALUE>, selector=dict(type='icicle'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -96511,11 +84361,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_style=<VALUE>, selector=dict(type='icicle'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -96530,11 +84375,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_textcase=<VALUE>, selector=dict(type='icicle'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -96551,11 +84391,6 @@ ], "magic_underscores": "fig.update_traces(outsidetextfont_variant=<VALUE>, selector=dict(type='icicle'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -96570,11 +84405,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(outsidetextfont_weight=<VALUE>, selector=dict(type='icicle'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(outsidetextfont=dict(...), selector=dict(type='icicle'))" }, "root": { @@ -96629,28 +84459,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='icicle'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='icicle'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='icicle'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='icicle'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='icicle'))" }, "categories": [], @@ -96838,14 +84646,9 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='sankey'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": false, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired. Note that this attribute is superseded by `node.hoverinfo` and `node.hoverinfo` for nodes and links respectively.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired. Note that this attribute is superseded by `node.hoverinfo` and `node.hoverinfo` for nodes and links respectively.", "dflt": "all", "editType": "calc", "extras": [ @@ -96864,25 +84667,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='sankey'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='sankey'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this sankey trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this sankey trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -96892,7 +84685,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this sankey trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this sankey trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -96981,22 +84774,12 @@ "valType": "color", "magic_underscores": "fig.update_traces(node_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data to each node.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(node_customdata=<VALUE>, selector=dict(type='sankey'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "description": "The nodes of the Sankey plot.", "editType": "calc", "groups": { @@ -97017,7 +84800,7 @@ "magic_underscores": "fig.update_traces(node_groups=list(...), selector=dict(type='sankey'))" }, "hoverinfo": { - "description": "Determines which trace information appear when hovering nodes. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears when hovering nodes. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "valType": "enumerated", @@ -97042,11 +84825,6 @@ ], "magic_underscores": "fig.update_traces(node_hoverlabel_align=<VALUE>, selector=dict(type='sankey'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -97054,11 +84832,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(node_hoverlabel_bgcolor=<VALUE>, selector=dict(type='sankey'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -97066,11 +84839,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(node_hoverlabel_bordercolor=<VALUE>, selector=dict(type='sankey'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "font": { "color": { @@ -97079,11 +84847,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(node_hoverlabel_font_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "calc", "family": { @@ -97095,11 +84858,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(node_hoverlabel_font_family=<VALUE>, selector=dict(type='sankey'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -97116,11 +84874,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(node_hoverlabel_font_lineposition=<VALUE>, selector=dict(type='sankey'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -97130,11 +84883,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(node_hoverlabel_font_shadow=<VALUE>, selector=dict(type='sankey'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -97142,11 +84890,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(node_hoverlabel_font_size=<VALUE>, selector=dict(type='sankey'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -97159,11 +84902,6 @@ ], "magic_underscores": "fig.update_traces(node_hoverlabel_font_style=<VALUE>, selector=dict(type='sankey'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -97178,11 +84916,6 @@ ], "magic_underscores": "fig.update_traces(node_hoverlabel_font_textcase=<VALUE>, selector=dict(type='sankey'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -97199,11 +84932,6 @@ ], "magic_underscores": "fig.update_traces(node_hoverlabel_font_variant=<VALUE>, selector=dict(type='sankey'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -97218,11 +84946,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(node_hoverlabel_font_weight=<VALUE>, selector=dict(type='sankey'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(node_hoverlabel_font=dict(...), selector=dict(type='sankey'))" }, "namelength": { @@ -97234,11 +84957,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(node_hoverlabel_namelength=<VALUE>, selector=dict(type='sankey'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -97264,11 +84982,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(node_hovertemplatefallback=<VALUE>, selector=dict(type='sankey'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "label": { "description": "The shown name of the node.", "dflt": [], @@ -97276,11 +84989,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(node_label=<VALUE>, selector=dict(type='sankey'))" }, - "labelsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `label`.", - "editType": "none", - "valType": "string" - }, "line": { "color": { "arrayOk": true, @@ -97290,11 +84998,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(node_line_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -97306,11 +85009,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(node_line_width=<VALUE>, selector=dict(type='sankey'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(node_line=dict(...), selector=dict(type='sankey'))" }, "pad": { @@ -97323,6 +85021,17 @@ "magic_underscores": "fig.update_traces(node_pad=<VALUE>, selector=dict(type='sankey'))" }, "role": "object", + "sort": { + "description": "For `auto` (the default), the vertical order of nodes will be determined automatically by the layout. For `input`, the vertical order of nodes is kept the same as the order in the input array.", + "dflt": "auto", + "editType": "calc", + "valType": "enumerated", + "values": [ + "auto", + "input" + ], + "magic_underscores": "fig.update_traces(node_sort=<VALUE>, selector=dict(type='sankey'))" + }, "thickness": { "arrayOk": false, "description": "Sets the thickness (in px) of the `nodes`.", @@ -97339,11 +85048,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(node_x=<VALUE>, selector=dict(type='sankey'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "y": { "description": "The normalized vertical position of the node.", "dflt": [], @@ -97351,11 +85055,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(node_y=<VALUE>, selector=dict(type='sankey'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(node=dict(...), selector=dict(type='sankey'))" }, "link": { @@ -97390,7 +85089,7 @@ "valType": "number" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": [ [ 0, @@ -97430,22 +85129,12 @@ "role": "object", "magic_underscores": "fig.update_traces(link_colorscales=list(...), selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data to each link.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(link_customdata=<VALUE>, selector=dict(type='sankey'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "description": "The links of the Sankey plot.", "editType": "calc", "hovercolor": { @@ -97455,13 +85144,8 @@ "valType": "color", "magic_underscores": "fig.update_traces(link_hovercolor=<VALUE>, selector=dict(type='sankey'))" }, - "hovercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovercolor`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { - "description": "Determines which trace information appear when hovering links. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears when hovering links. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "calc", "valType": "enumerated", @@ -97486,11 +85170,6 @@ ], "magic_underscores": "fig.update_traces(link_hoverlabel_align=<VALUE>, selector=dict(type='sankey'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -97498,11 +85177,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(link_hoverlabel_bgcolor=<VALUE>, selector=dict(type='sankey'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -97510,11 +85184,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(link_hoverlabel_bordercolor=<VALUE>, selector=dict(type='sankey'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "font": { "color": { @@ -97523,11 +85192,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(link_hoverlabel_font_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "calc", "family": { @@ -97539,11 +85203,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(link_hoverlabel_font_family=<VALUE>, selector=dict(type='sankey'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -97560,11 +85219,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(link_hoverlabel_font_lineposition=<VALUE>, selector=dict(type='sankey'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -97574,11 +85228,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(link_hoverlabel_font_shadow=<VALUE>, selector=dict(type='sankey'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -97586,11 +85235,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(link_hoverlabel_font_size=<VALUE>, selector=dict(type='sankey'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -97603,11 +85247,6 @@ ], "magic_underscores": "fig.update_traces(link_hoverlabel_font_style=<VALUE>, selector=dict(type='sankey'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -97622,11 +85261,6 @@ ], "magic_underscores": "fig.update_traces(link_hoverlabel_font_textcase=<VALUE>, selector=dict(type='sankey'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -97643,11 +85277,6 @@ ], "magic_underscores": "fig.update_traces(link_hoverlabel_font_variant=<VALUE>, selector=dict(type='sankey'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -97662,11 +85291,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(link_hoverlabel_font_weight=<VALUE>, selector=dict(type='sankey'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(link_hoverlabel_font=dict(...), selector=dict(type='sankey'))" }, "namelength": { @@ -97678,11 +85302,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(link_hoverlabel_namelength=<VALUE>, selector=dict(type='sankey'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -97708,11 +85327,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(link_hovertemplatefallback=<VALUE>, selector=dict(type='sankey'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "label": { "description": "The shown name of the link.", "dflt": [], @@ -97720,11 +85334,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(link_label=<VALUE>, selector=dict(type='sankey'))" }, - "labelsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `label`.", - "editType": "none", - "valType": "string" - }, "line": { "color": { "arrayOk": true, @@ -97734,11 +85343,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(link_line_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "width": { @@ -97750,14 +85354,20 @@ "valType": "number", "magic_underscores": "fig.update_traces(link_line_width=<VALUE>, selector=dict(type='sankey'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(link_line=dict(...), selector=dict(type='sankey'))" }, "role": "object", + "sort": { + "description": "For `auto` (the default), the order of links attached to each node is determined automatically by the layout. For `input`, the order of links at each node is kept the same as the order in the input array.", + "dflt": "auto", + "editType": "calc", + "valType": "enumerated", + "values": [ + "auto", + "input" + ], + "magic_underscores": "fig.update_traces(link_sort=<VALUE>, selector=dict(type='sankey'))" + }, "source": { "description": "An integer number `[0..nodes.length - 1]` that represents the source node.", "dflt": [], @@ -97765,11 +85375,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(link_source=<VALUE>, selector=dict(type='sankey'))" }, - "sourcesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `source`.", - "editType": "none", - "valType": "string" - }, "target": { "description": "An integer number `[0..nodes.length - 1]` that represents the target node.", "dflt": [], @@ -97777,11 +85382,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(link_target=<VALUE>, selector=dict(type='sankey'))" }, - "targetsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `target`.", - "editType": "none", - "valType": "string" - }, "value": { "description": "A numeric value representing the flow volume value.", "dflt": [], @@ -97789,11 +85389,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(link_value=<VALUE>, selector=dict(type='sankey'))" }, - "valuesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `value`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(link=dict(...), selector=dict(type='sankey'))" }, "textfont": { @@ -97928,11 +85523,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='sankey'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -97940,11 +85530,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='sankey'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -97952,11 +85537,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='sankey'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "font": { "color": { @@ -97965,11 +85545,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='sankey'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "calc", "family": { @@ -97981,11 +85556,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='sankey'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -98002,11 +85572,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='sankey'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -98016,11 +85581,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='sankey'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -98028,11 +85588,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='sankey'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -98045,11 +85600,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='sankey'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -98064,11 +85614,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='sankey'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -98085,11 +85630,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='sankey'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -98104,11 +85644,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='sankey'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='sankey'))" }, "namelength": { @@ -98120,11 +85655,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='sankey'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -98155,28 +85685,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='sankey'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='sankey'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='sankey'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='sankey'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='sankey'))" }, "categories": [ @@ -98376,11 +85884,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='splom'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, "description": "Sets text elements associated with each (x,y) pair to appear on hover. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates.", @@ -98389,11 +85892,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='splom'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "dimensions": { "items": { "dimension": { @@ -98401,7 +85899,7 @@ "editType": "calc+clearAxisTypes", "matches": { "description": "Determines whether or not the x & y axes generated by this dimension match. Equivalent to setting the `matches` axis attribute in the layout with the correct axis id.", - "dflt": false, + "dflt": true, "editType": "calc", "valType": "boolean" }, @@ -98440,11 +85938,6 @@ "editType": "calc+clearAxisTypes", "valType": "data_array" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "visible": { "description": "Determines whether or not this dimension is shown on the graph. Note that even visible false dimension contribute to the default grid generate by this splom trace.", "dflt": true, @@ -98464,14 +85957,9 @@ "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='splom'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -98489,11 +85977,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='splom'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -98509,20 +85992,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='splom'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `x` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `xaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", "magic_underscores": "fig.update_traces(xhoverformat=<VALUE>, selector=dict(type='splom'))" }, "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", + "description": "Sets the hover text formatting rule for `y` using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*By default the values are formatted using `yaxis.hoverformat`.", "dflt": "", "editType": "none", "valType": "string", @@ -98535,22 +86013,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='splom'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='splom'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "marker": { "angle": { "arrayOk": true, @@ -98560,11 +86028,6 @@ "valType": "angle", "magic_underscores": "fig.update_traces(marker_angle=<VALUE>, selector=dict(type='splom'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -99092,22 +86555,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='splom'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='splom'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -99219,7 +86672,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -99312,7 +86765,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='splom'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -99322,11 +86775,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='splom'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "line": { "autocolorscale": { @@ -99397,7 +86845,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='splom'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -99407,11 +86855,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='splom'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -99429,11 +86872,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='splom'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='splom'))" }, "opacity": { @@ -99445,11 +86883,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='splom'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -99500,11 +86933,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='splom'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -100001,11 +87429,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='splom'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='splom'))" }, "diagonal": { @@ -100140,11 +87563,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='splom'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -100152,11 +87570,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='splom'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -100164,11 +87577,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='splom'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -100177,11 +87585,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='splom'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -100193,11 +87596,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='splom'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -100214,11 +87612,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='splom'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -100228,11 +87621,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='splom'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -100240,11 +87628,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='splom'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -100257,11 +87640,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='splom'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -100276,11 +87654,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='splom'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -100297,11 +87670,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='splom'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -100316,11 +87684,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='splom'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='splom'))" }, "namelength": { @@ -100332,11 +87695,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='splom'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -100353,28 +87711,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='splom'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='splom'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='splom'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='splom'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='splom'))" }, "categories": [ @@ -100556,11 +87892,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='parcoords'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "dimensions": { "items": { "dimension": { @@ -100631,31 +87962,16 @@ "editType": "plot", "valType": "data_array" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear.", "editType": "plot", "valType": "data_array" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Dimension values. `values[n]` represents the value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated). Each value must be a finite number.", "editType": "calc", "valType": "data_array" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "visible": { "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`.", "dflt": true, @@ -100674,25 +87990,15 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='parcoords'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='parcoords'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this parcoords trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this parcoords trace.", "dflt": 0, "editType": "plot", "min": 0, @@ -100702,7 +88008,7 @@ "editType": "plot", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this parcoords trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this parcoords trace.", "dflt": 0, "editType": "plot", "min": 0, @@ -101287,22 +88593,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(line_colorbar_ticktext=<VALUE>, selector=dict(type='parcoords'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(line_colorbar_tickvals=<VALUE>, selector=dict(type='parcoords'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -101414,7 +88710,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -101507,7 +88803,7 @@ "magic_underscores": "fig.update_traces(line_colorbar=dict(...), selector=dict(type='parcoords'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": [ [ 0, @@ -101586,11 +88882,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(line_colorscale=<VALUE>, selector=dict(type='parcoords'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `line.color` is set to a numerical array. If true, `line.cmin` will correspond to the last color in the array and `line.cmax` will correspond to the first color.", @@ -101956,28 +89247,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='parcoords'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='parcoords'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='parcoords'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='parcoords'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='parcoords'))" }, "categories": [ @@ -102146,11 +89415,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(counts=<VALUE>, selector=dict(type='parcats'))" }, - "countssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `counts`.", - "editType": "none", - "valType": "string" - }, "dimensions": { "items": { "dimension": { @@ -102159,11 +89423,6 @@ "editType": "calc", "valType": "data_array" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the categories in the dimension. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`.", "dflt": "trace", @@ -102194,22 +89453,12 @@ "editType": "calc", "valType": "data_array" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "values": { "description": "Dimension values. `values[n]` represents the category value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated).", "dflt": [], "editType": "calc", "valType": "data_array" }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, "visible": { "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`.", "dflt": true, @@ -102223,7 +89472,7 @@ }, "hoverinfo": { "arrayOk": false, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "plot", "extras": [ @@ -102259,14 +89508,9 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='parcats'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "domain": { "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this parcats trace .", + "description": "If there is a layout grid, use the domain for this column in the grid for this parcats trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -102276,7 +89520,7 @@ "editType": "calc", "role": "object", "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this parcats trace .", + "description": "If there is a layout grid, use the domain for this row in the grid for this parcats trace.", "dflt": 0, "editType": "calc", "min": 0, @@ -102861,22 +90105,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(line_colorbar_ticktext=<VALUE>, selector=dict(type='parcats'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(line_colorbar_tickvals=<VALUE>, selector=dict(type='parcats'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -102988,7 +90222,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -103081,7 +90315,7 @@ "magic_underscores": "fig.update_traces(line_colorbar=dict(...), selector=dict(type='parcats'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -103091,11 +90325,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(line_colorscale=<VALUE>, selector=dict(type='parcats'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "hovertemplate": { "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `count` and `probability`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -103385,28 +90614,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='parcats'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='parcats'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='parcats'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='parcats'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='parcats'))" }, "categories": [ @@ -103594,11 +90801,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='carpet'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -103612,33 +90814,18 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(x=<VALUE>, selector=dict(type='carpet'))" }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, "y": { "description": "A two dimensional array of y coordinates at each carpet point.", "editType": "calc+clearAxisTypes", "valType": "data_array", "magic_underscores": "fig.update_traces(y=<VALUE>, selector=dict(type='carpet'))" }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, "a": { "description": "An array containing values of the first parameter value", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(a=<VALUE>, selector=dict(type='carpet'))" }, - "asrc": { - "description": "Sets the source reference on Chart Studio Cloud for `a`.", - "editType": "none", - "valType": "string" - }, "a0": { "description": "Alternate to `a`. Builds a linear space of a coordinates. Use with `da` where `a0` is the starting coordinate and `da` the step.", "dflt": 0, @@ -103659,11 +90846,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(b=<VALUE>, selector=dict(type='carpet'))" }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, "b0": { "description": "Alternate to `b`. Builds a linear space of a coordinates. Use with `db` where `b0` is the starting coordinate and `db` the step.", "dflt": 0, @@ -103685,22 +90867,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='carpet'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='carpet'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "aaxis": { "arraydtick": { "description": "The stride between grid lines along the axis", @@ -103747,11 +90919,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(aaxis_categoryarray=<VALUE>, selector=dict(type='carpet'))" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`.", "dflt": "trace", @@ -104284,22 +91451,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(aaxis_ticktext=<VALUE>, selector=dict(type='carpet'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(aaxis_tickvals=<VALUE>, selector=dict(type='carpet'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "title": { "editType": "calc", "font": { @@ -104479,11 +91636,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(baxis_categoryarray=<VALUE>, selector=dict(type='carpet'))" }, - "categoryarraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `categoryarray`.", - "editType": "none", - "valType": "string" - }, "categoryorder": { "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`.", "dflt": "trace", @@ -105016,22 +92168,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(baxis_ticktext=<VALUE>, selector=dict(type='carpet'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(baxis_tickvals=<VALUE>, selector=dict(type='carpet'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "title": { "editType": "calc", "font": { @@ -105307,28 +92449,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='carpet'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='carpet'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='carpet'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='carpet'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='carpet'))" }, "categories": [ @@ -105550,11 +92670,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='scattercarpet'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -105568,35 +92683,20 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(a=<VALUE>, selector=dict(type='scattercarpet'))" }, - "asrc": { - "description": "Sets the source reference on Chart Studio Cloud for `a`.", - "editType": "none", - "valType": "string" - }, "b": { "description": "Sets the b-axis coordinates.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(b=<VALUE>, selector=dict(type='scattercarpet'))" }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (a,b) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets text elements associated with each (a,b) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the data points in (a,b). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='scattercarpet'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", @@ -105616,11 +92716,6 @@ ], "magic_underscores": "fig.update_traces(textposition=<VALUE>, selector=dict(type='scattercarpet'))" }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "texttemplate": { "arrayOk": true, "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `a`, `b` and `text`.", @@ -105636,27 +92731,17 @@ "valType": "any", "magic_underscores": "fig.update_traces(texttemplatefallback=<VALUE>, selector=dict(type='scattercarpet'))" }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "arrayOk": true, - "description": "Sets hover text elements associated with each (a,b) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b). To be seen, trace `hoverinfo` must contain a *text* flag.", + "description": "Sets hover text elements associated with each (a,b) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the data points in (a,b). To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", "editType": "style", "valType": "string", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='scattercarpet'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "hoverinfo": { "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "description": "Determines what trace information appears on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", "dflt": "all", "editType": "none", "extras": [ @@ -105673,11 +92758,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverinfo=<VALUE>, selector=dict(type='scattercarpet'))" }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -105693,11 +92773,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(hovertemplatefallback=<VALUE>, selector=dict(type='scattercarpet'))" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -105705,22 +92780,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='scattercarpet'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='scattercarpet'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -105755,11 +92820,6 @@ ], "magic_underscores": "fig.update_traces(marker_angleref=<VALUE>, selector=dict(type='scattercarpet'))" }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", "dflt": true, @@ -106287,22 +93347,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_ticktext=<VALUE>, selector=dict(type='scattercarpet'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(marker_colorbar_tickvals=<VALUE>, selector=dict(type='scattercarpet'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -106414,7 +93464,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -106507,7 +93557,7 @@ "magic_underscores": "fig.update_traces(marker_colorbar=dict(...), selector=dict(type='scattercarpet'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -106517,11 +93567,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_colorscale=<VALUE>, selector=dict(type='scattercarpet'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "gradient": { "color": { @@ -106531,11 +93576,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(marker_gradient_color=<VALUE>, selector=dict(type='scattercarpet'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "role": "object", "type": { @@ -106552,11 +93592,6 @@ ], "magic_underscores": "fig.update_traces(marker_gradient_type=<VALUE>, selector=dict(type='scattercarpet'))" }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_gradient=dict(...), selector=dict(type='scattercarpet'))" }, "line": { @@ -106628,7 +93663,7 @@ "magic_underscores": "fig.update_traces(marker_line_coloraxis=<VALUE>, selector=dict(type='scattercarpet'))" }, "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "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, hsla, hwb, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -106638,11 +93673,6 @@ "valType": "colorscale", "magic_underscores": "fig.update_traces(marker_line_colorscale=<VALUE>, selector=dict(type='scattercarpet'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "dash": { "arrayOk": true, "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*).", @@ -106659,11 +93689,6 @@ ], "magic_underscores": "fig.update_traces(marker_line_dash=<VALUE>, selector=dict(type='scattercarpet'))" }, - "dashsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `dash`.", - "editType": "none", - "valType": "string" - }, "editType": "calc", "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", @@ -106681,11 +93706,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_line_width=<VALUE>, selector=dict(type='scattercarpet'))" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker_line=dict(...), selector=dict(type='scattercarpet'))" }, "maxdisplayed": { @@ -106705,11 +93725,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_opacity=<VALUE>, selector=dict(type='scattercarpet'))" }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, @@ -106760,11 +93775,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_sizeref=<VALUE>, selector=dict(type='scattercarpet'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "standoff": { "arrayOk": true, "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", @@ -106774,11 +93784,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(marker_standoff=<VALUE>, selector=dict(type='scattercarpet'))" }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", @@ -107275,11 +94280,6 @@ ], "magic_underscores": "fig.update_traces(marker_symbol=<VALUE>, selector=dict(type='scattercarpet'))" }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(marker=dict(...), selector=dict(type='scattercarpet'))" }, "line": { @@ -107292,11 +94292,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(line_backoff=<VALUE>, selector=dict(type='scattercarpet'))" }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, "color": { "description": "Sets the line color.", "editType": "style", @@ -107357,11 +94352,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(textfont_color=<VALUE>, selector=dict(type='scattercarpet'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the text font.", "editType": "calc", "family": { @@ -107373,11 +94363,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_family=<VALUE>, selector=dict(type='scattercarpet'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -107394,11 +94379,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(textfont_lineposition=<VALUE>, selector=dict(type='scattercarpet'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -107408,11 +94388,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(textfont_shadow=<VALUE>, selector=dict(type='scattercarpet'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -107420,11 +94395,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(textfont_size=<VALUE>, selector=dict(type='scattercarpet'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -107437,11 +94407,6 @@ ], "magic_underscores": "fig.update_traces(textfont_style=<VALUE>, selector=dict(type='scattercarpet'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -107456,11 +94421,6 @@ ], "magic_underscores": "fig.update_traces(textfont_textcase=<VALUE>, selector=dict(type='scattercarpet'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -107477,11 +94437,6 @@ ], "magic_underscores": "fig.update_traces(textfont_variant=<VALUE>, selector=dict(type='scattercarpet'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -107496,11 +94451,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(textfont_weight=<VALUE>, selector=dict(type='scattercarpet'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(textfont=dict(...), selector=dict(type='scattercarpet'))" }, "selectedpoints": { @@ -107638,11 +94588,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_align=<VALUE>, selector=dict(type='scattercarpet'))" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", @@ -107650,11 +94595,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bgcolor=<VALUE>, selector=dict(type='scattercarpet'))" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", @@ -107662,11 +94602,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_bordercolor=<VALUE>, selector=dict(type='scattercarpet'))" }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, "editType": "none", "font": { "color": { @@ -107675,11 +94610,6 @@ "valType": "color", "magic_underscores": "fig.update_traces(hoverlabel_font_color=<VALUE>, selector=dict(type='scattercarpet'))" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, "description": "Sets the font used in hover labels.", "editType": "none", "family": { @@ -107691,11 +94621,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_family=<VALUE>, selector=dict(type='scattercarpet'))" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, "lineposition": { "arrayOk": true, "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", @@ -107712,11 +94637,6 @@ "valType": "flaglist", "magic_underscores": "fig.update_traces(hoverlabel_font_lineposition=<VALUE>, selector=dict(type='scattercarpet'))" }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", "shadow": { "arrayOk": true, @@ -107726,11 +94646,6 @@ "valType": "string", "magic_underscores": "fig.update_traces(hoverlabel_font_shadow=<VALUE>, selector=dict(type='scattercarpet'))" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "none", @@ -107738,11 +94653,6 @@ "valType": "number", "magic_underscores": "fig.update_traces(hoverlabel_font_size=<VALUE>, selector=dict(type='scattercarpet'))" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", @@ -107755,11 +94665,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_style=<VALUE>, selector=dict(type='scattercarpet'))" }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, "textcase": { "arrayOk": true, "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", @@ -107774,11 +94679,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_textcase=<VALUE>, selector=dict(type='scattercarpet'))" }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -107795,11 +94695,6 @@ ], "magic_underscores": "fig.update_traces(hoverlabel_font_variant=<VALUE>, selector=dict(type='scattercarpet'))" }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", @@ -107814,11 +94709,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_font_weight=<VALUE>, selector=dict(type='scattercarpet'))" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - }, "magic_underscores": "fig.update_traces(hoverlabel_font=dict(...), selector=dict(type='scattercarpet'))" }, "namelength": { @@ -107830,11 +94720,6 @@ "valType": "integer", "magic_underscores": "fig.update_traces(hoverlabel_namelength=<VALUE>, selector=dict(type='scattercarpet'))" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, "role": "object", "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", @@ -107861,28 +94746,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='scattercarpet'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='scattercarpet'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='scattercarpet'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='scattercarpet'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='scattercarpet'))" }, "categories": [ @@ -108088,11 +94951,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(ids=<VALUE>, selector=dict(type='contourcarpet'))" }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, "zorder": { "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", "dflt": 0, @@ -108106,11 +94964,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(z=<VALUE>, selector=dict(type='contourcarpet'))" }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - }, "a": { "description": "Sets the x coordinates.", "editType": "calc+clearAxisTypes", @@ -108121,11 +94974,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(a=<VALUE>, selector=dict(type='contourcarpet'))" }, - "asrc": { - "description": "Sets the source reference on Chart Studio Cloud for `a`.", - "editType": "none", - "valType": "string" - }, "atype": { "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).", "editType": "calc+clearAxisTypes", @@ -108168,11 +95016,6 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(b=<VALUE>, selector=dict(type='contourcarpet'))" }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, "btype": { "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)", "editType": "calc+clearAxisTypes", @@ -108211,22 +95054,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(text=<VALUE>, selector=dict(type='contourcarpet'))" }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, "hovertext": { "description": "Same as `text`.", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(hovertext=<VALUE>, selector=dict(type='contourcarpet'))" }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "editType": "none", - "valType": "string" - }, "meta": { "arrayOk": true, "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", @@ -108234,22 +95067,12 @@ "valType": "any", "magic_underscores": "fig.update_traces(meta=<VALUE>, selector=dict(type='contourcarpet'))" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", "valType": "data_array", "magic_underscores": "fig.update_traces(customdata=<VALUE>, selector=dict(type='contourcarpet'))" }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, "xaxis": { "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", "dflt": "x", @@ -108774,22 +95597,12 @@ "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_ticktext=<VALUE>, selector=dict(type='contourcarpet'))" }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", "editType": "colorbars", "valType": "data_array", "magic_underscores": "fig.update_traces(colorbar_tickvals=<VALUE>, selector=dict(type='contourcarpet'))" }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, @@ -108901,7 +95714,7 @@ }, "role": "object", "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` is *v* and defaults to *right* when `orientation` is *h*.", "editType": "colorbars", "valType": "enumerated", "values": [ @@ -109004,7 +95817,7 @@ "magic_underscores": "fig.update_traces(autocolorscale=<VALUE>, selector=dict(type='contourcarpet'))" }, "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsla, hwb, 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: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", "dflt": null, "editType": "calc", "impliedEdits": { @@ -109223,7 +96036,7 @@ "magic_underscores": "fig.update_traces(contours_labelformat=<VALUE>, selector=dict(type='contourcarpet'))" }, "operation": { - "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.", + "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.", "dflt": "=", "editType": "calc", "valType": "enumerated", @@ -109329,28 +96142,6 @@ "valType": "any", "magic_underscores": "fig.update_traces(uirevision=<VALUE>, selector=dict(type='contourcarpet'))" }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number", - "magic_underscores": "fig.update_traces(stream_maxpoints=<VALUE>, selector=dict(type='contourcarpet'))" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string", - "magic_underscores": "fig.update_traces(stream_token=<VALUE>, selector=dict(type='contourcarpet'))" - }, - "magic_underscores": "fig.update_traces(stream=dict(...), selector=dict(type='contourcarpet'))" - }, "magic_underscores": "fig.update_traces(..., selector=dict(type='contourcarpet'))" }, "categories": [ From c482cfec1d4b77427e9d73f3d862bc108dac1268 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 10:27:38 -0600 Subject: [PATCH 16/25] Fix file name typo --- ...n-map.html => 2015-08-15-north-america-precipitation-map.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/plotly_js/maps/scatter-plot-on-maps/{2015-08-15-north-america-percipitation-map.html => 2015-08-15-north-america-precipitation-map.html} (100%) diff --git a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-percipitation-map.html b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html similarity index 100% rename from _posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-percipitation-map.html rename to _posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html From 729dfbcfb83ee5496b6dcb3cb511861e113ddb09 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 10:59:30 -0600 Subject: [PATCH 17/25] Rename file --- ...7-05-22-add_links.html => 2017-05-22-sankey-from-dataset.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename _posts/plotly_js/basic/sankey/{2017-05-22-add_links.html => 2017-05-22-sankey-from-dataset.html} (100%) diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-add_links.html b/_posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html similarity index 100% rename from _posts/plotly_js/basic/sankey/2017-05-22-add_links.html rename to _posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html From caa72cd4bb83dff05fe9a5b1b79d70d2e0604fc8 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 16:26:51 -0600 Subject: [PATCH 18/25] Update existing docs for v4, add some new pages for new v4 features --- _data/make_ref_pages.py | 2 +- _data/orderings.json | 7 +- _includes/layouts/head.html | 6 + .../plotly_js/2015-04-05-plotly_js-index.html | 4 +- .../plotly_js/2019-07-03-is-plotly-free-js.md | 8 +- .../2019-04-16-basic-isosurface.html | 2 +- .../2019-04-16-isosurface-slices.html | 2 +- .../2019-04-16-multiple-isosurfaces-caps.html | 2 +- _posts/plotly_js/README.md | 2 +- .../2017-08-22-choropleth-animation.html | 1 + .../basic/bubble/2015-04-09-bubblechart.html | 2 +- .../2019-04-11-large-number-of-slices.html | 2 +- .../2019-06-13-basic-branchvalues-total.html | 2 +- .../funnel/2019-06-27-funnelarea.html | 4 +- .../2019-06-27-part-of-whole-funnel.html | 4 +- .../colors/2026-08-04-color-formats.html | 36 +++++ .../2026-08-04-colors_plotly_js_index.html | 66 +++++++++ .../2015-09-24-config-showSendToCloud.html | 16 +- .../2019-10-24-double-click-delay.html | 2 +- .../2020-01-24-remove-modebarButtons.html | 3 +- .../fundamentals/latex/2015-04-09-latex.html | 2 +- .../2015-04-09-latex_plotly_js_index.html | 17 +++ .../typescript/2026-08-04-typescript.md | 121 +++++++++++++++ .../bubble-maps/2015-07-11-bubble-map.html | 3 +- .../2015-08-12-USA-bubble-map.html | 2 +- .../2015-07-11-choropleth-north-america.html | 2 +- .../2015-07-11-choropleth-world-robinson.html | 2 +- .../2015-08-10-countrygdp-choropleth-map.html | 2 +- ...2015-08-11-US-pop-by-state-choropleth.html | 2 +- .../2019-09-02-access-token.html | 2 +- .../2019-09-02-multi-filled-area.html | 2 +- .../2015-08-12-us-flight-paths-map.html | 3 +- .../2015-11-07-lines-on-orthographic.html | 2 +- .../maps/map-view/2026-08-04-geo-autofit.html | 41 ++++++ .../map-view/2026-08-04-geo-zoom-limits.html | 48 ++++++ .../2026-08-04-map-view_plotly_js_index.html | 57 ++++++++ .../map-view/2026-08-04-tile-map-autofit.html | 32 ++++ .../2026-08-04-tile-map-explicit-view.html | 37 +++++ ...9-migrate-to-maplibre_plotly_js_index.html | 28 +++- .../2019-07-03-country-names-example.html | 7 + .../2019-07-03-country-names-warning.html | 10 -- .../2019-07-03-iso3-table.html | 138 +++++++++--------- .../2015-08-12-US-airport-map.html | 2 +- ...08-15-north-america-precipitation-map.html | 25 ++-- .../2017-08-01-scattermapbox_lines.html | 2 +- .../scattermapbox/2019-09-02-symbols.html | 6 +- .../quiver/2026-08-04-basic-quiver.html | 27 ++++ .../quiver/2026-08-04-quiver-anchor-size.html | 47 ++++++ .../quiver/2026-08-04-quiver-color.html | 57 ++++++++ .../quiver/2026-08-04-quiver-style.html | 66 +++++++++ .../2026-08-04-quiver_plotly_js_index.html | 37 +++++ .../2016-02-15-continuous-variable.html | 4 +- .../error-bar/2015-04-09-error-bar-style.html | 2 +- .../2017-01-20-mixed-subplots.html | 3 +- .../2015-04-09-multiple-axes-double.html | 4 + .../2026-08-04-overlaying-axis-tickmode.html | 53 +++++++ 56 files changed, 925 insertions(+), 143 deletions(-) create mode 100644 _posts/plotly_js/fundamentals/colors/2026-08-04-color-formats.html create mode 100644 _posts/plotly_js/fundamentals/colors/2026-08-04-colors_plotly_js_index.html create mode 100644 _posts/plotly_js/guides/typescript/2026-08-04-typescript.md create mode 100644 _posts/plotly_js/maps/map-view/2026-08-04-geo-autofit.html create mode 100644 _posts/plotly_js/maps/map-view/2026-08-04-geo-zoom-limits.html create mode 100644 _posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html create mode 100644 _posts/plotly_js/maps/map-view/2026-08-04-tile-map-autofit.html create mode 100644 _posts/plotly_js/maps/map-view/2026-08-04-tile-map-explicit-view.html delete mode 100644 _posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-warning.html create mode 100644 _posts/plotly_js/scientific/quiver/2026-08-04-basic-quiver.html create mode 100644 _posts/plotly_js/scientific/quiver/2026-08-04-quiver-anchor-size.html create mode 100644 _posts/plotly_js/scientific/quiver/2026-08-04-quiver-color.html create mode 100644 _posts/plotly_js/scientific/quiver/2026-08-04-quiver-style.html create mode 100644 _posts/plotly_js/scientific/quiver/2026-08-04-quiver_plotly_js_index.html create mode 100644 _posts/plotly_js/subplot/multiple-axes/2026-08-04-overlaying-axis-tickmode.html diff --git a/_data/make_ref_pages.py b/_data/make_ref_pages.py index ee5e118ab..a76c18fb5 100644 --- a/_data/make_ref_pages.py +++ b/_data/make_ref_pages.py @@ -9,7 +9,7 @@ lang = "csharp" if lang == "c#" else lang langcode = "plotly_js" if lang == "javascript" else lang for attr in [ - "xaxis", "yaxis", "coloraxis", "scene", "polar", "ternary", "smith", "geo", "mapbox", + "xaxis", "yaxis", "coloraxis", "scene", "polar", "ternary", "smith", "geo", "map", "sliders", "updatemenus", "annotations", "shapes", "images","selections", "global" ]: fullattr = "layout" + ("." + attr if attr != "global" else "") diff --git a/_data/orderings.json b/_data/orderings.json index bbc9c956a..d8312694b 100644 --- a/_data/orderings.json +++ b/_data/orderings.json @@ -50,7 +50,6 @@ "scene", "geo", "map", - "mapbox", "polar", "smith", @@ -63,8 +62,6 @@ "sliders", "selections", - "hidesources", - "_deprecated", "radialaxis", "angularaxis", @@ -75,7 +72,7 @@ "traces": [ "scatter", "scattergl", "bar", "pie", "heatmap", "heatmapgl","image", - "contour", "table", + "contour", "quiver", "table", "box", "violin", "histogram", "histogram2d", "histogram2dcontour", @@ -83,7 +80,7 @@ "scatter3d", "surface", "mesh3d", "cone", "streamtube", "volume", "isosurface", - "scattergeo", "choropleth", "scattermap", "scattermapbox", "choroplethmap", "choroplethmapbox", "densitymap", "densitymapbox", + "scattergeo", "choropleth", "scattermap", "choroplethmap", "densitymap", "scatterpolar", "scatterpolargl", "barpolar", "scatterternary", "scattersmith", "sunburst", "treemap", "icicle", diff --git a/_includes/layouts/head.html b/_includes/layouts/head.html index c13b2da6a..a1f6c3673 100644 --- a/_includes/layouts/head.html +++ b/_includes/layouts/head.html @@ -35,7 +35,13 @@ {% endif %} + {% if page.language == "r" or page.language == "ggplot2" %} + + {% else %} + + + {% endif %} {% if page.language == "plotly_js" %} diff --git a/_posts/plotly_js/2015-04-05-plotly_js-index.html b/_posts/plotly_js/2015-04-05-plotly_js-index.html index 1e7a81041..de73c653f 100755 --- a/_posts/plotly_js/2015-04-05-plotly_js-index.html +++ b/_posts/plotly_js/2015-04-05-plotly_js-index.html @@ -77,7 +77,7 @@

    Plotly JavaScript Open Source Graphing Library

    x: 0, y: 0, xref: 'paper', yref: 'paper' }] } - Plotly.newPlot(document.getElementById('contour-plot'), [trace], layout, {showLink: false}); + Plotly.newPlot(document.getElementById('contour-plot'), [trace], layout); }); @@ -127,7 +127,7 @@

    Plotly JavaScript Open Source Graphing Library

    } }; - Plotly.newPlot(document.getElementById('wind-speed'), [trace], layout, {showLink: false}); + Plotly.newPlot(document.getElementById('wind-speed'), [trace], layout); }); diff --git a/_posts/plotly_js/2019-07-03-is-plotly-free-js.md b/_posts/plotly_js/2019-07-03-is-plotly-free-js.md index 654c7aa2a..c6f97b378 100644 --- a/_posts/plotly_js/2019-07-03-is-plotly-free-js.md +++ b/_posts/plotly_js/2019-07-03-is-plotly-free-js.md @@ -16,13 +16,15 @@ language: plotly_js #### Can I use Plotly.js without signing up to any service?     **Yes.**   You can use Plotly.js to make, view, and distribute charts and maps without registering for any service, -obtaining any token, or creating any account. The one exception is that to view tile maps -which use tiles from the Mapbox service (which is optional, as [you can use other tile servers](/javascript/mapbox-layers)), you will need to have a Mapbox token. +obtaining any token, or creating any account. The built-in tile map styles use open tile providers and need no token. Some +third-party tile providers you can [point Plotly.js at](/javascript/tile-map-layers) do require an account with that +provider — Stamen tiles, for instance, are served by Stadia Maps and need a Stadia API key. Sharing a chart with +[Plotly Cloud](https://cloud.plotly.com) from the modebar requires a Plotly Cloud account, but nothing else does. #### Can I use Plotly.js offline, without being connected to the internet?     **Yes.**   You can use Plotly.js to make, view, and distribute graphics totally offline. The one exception is that to view tile maps -which use tiles from a cloud-hosted service, such as Open Street Maps or Mapbox, you will need a connection to that service. You can view tile maps totally offline if you run your own local tile server and [use its tiles](/javascript/mapbox-layers). +which use tiles from a cloud-hosted service, such as OpenStreetMap, you will need a connection to that service. You can view tile maps totally offline if you run your own local tile server and [use its tiles](/javascript/tile-map-layers). #### Is Dash free? diff --git a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-basic-isosurface.html b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-basic-isosurface.html index 7e7e3da8b..620b3b24c 100644 --- a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-basic-isosurface.html +++ b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-basic-isosurface.html @@ -33,4 +33,4 @@ } }; -Plotly.newPlot('myDiv', data, layout, {showSendToCloud: true}); +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-isosurface-slices.html b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-isosurface-slices.html index 35cd65078..1fb5a4780 100644 --- a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-isosurface-slices.html +++ b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-isosurface-slices.html @@ -46,5 +46,5 @@ } }; -Plotly.newPlot('myDiv', data, layout, {showSendToCloud: true}); +Plotly.newPlot('myDiv', data, layout); }); diff --git a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-multiple-isosurfaces-caps.html b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-multiple-isosurfaces-caps.html index cbe303429..2d59af0f4 100644 --- a/_posts/plotly_js/3d/3d-isosurface/2019-04-16-multiple-isosurfaces-caps.html +++ b/_posts/plotly_js/3d/3d-isosurface/2019-04-16-multiple-isosurfaces-caps.html @@ -43,6 +43,6 @@ } }; -Plotly.newPlot('myDiv', data, layout, {showSendToCloud: true}); +Plotly.newPlot('myDiv', data, layout); }); diff --git a/_posts/plotly_js/README.md b/_posts/plotly_js/README.md index 82a5b5a00..18ba35509 100644 --- a/_posts/plotly_js/README.md +++ b/_posts/plotly_js/README.md @@ -122,7 +122,7 @@ Plotly.newPlot('myDiv', data); - use "real" data to make the examples realistic and useful for users. - avoid using random or dummy data as much as humanly possible! Should only be a last resort. - upload data files to https://github.com/plotly/datasets as importing data rather than pasting a large chunk of data in the tutorial creates a cleaner example. - - use `var config = {mapboxAccessToken: "your access token"};` if your chart requires Mapbox authentication. `"your access token` will replaced by Plotly's private token at build time. In development mode, you will need to create a `_data/mapboxtoken.yml` file and paste Plotly's non-URL restricted Mapbox key into it. This is available in 1Password. + - map examples must not require an API key. The `map` traces (`scattermap`, `choroplethmap`, `densitymap`) use open tile providers, and the `mapboxAccessToken` config option was removed in Plotly.js v4. Keep the example's `layout.map.style` set to a built-in style name or to a keyless style URL, so the chart renders for everyone reading the page. If you want to document a provider that does need a key, put that URL in `markdown_content` as a code snippet for the reader to copy and add their own key to — don't put it in the example itself, where a placeholder key means the rendered chart has no tiles and a real key would be committed to a public repo. ## Make a Pull Request - Ready for your changes to be reviewed? Make a pull request! diff --git a/_posts/plotly_js/animations/map-animations/2017-08-22-choropleth-animation.html b/_posts/plotly_js/animations/map-animations/2017-08-22-choropleth-animation.html index 552dff20a..2bad23280 100644 --- a/_posts/plotly_js/animations/map-animations/2017-08-22-choropleth-animation.html +++ b/_posts/plotly_js/animations/map-animations/2017-08-22-choropleth-animation.html @@ -52,6 +52,7 @@ }, geo:{ scope: 'world', + fitbounds: false, countrycolor: 'rgb(255, 255, 255)', showland: true, landcolor: 'rgb(217, 217, 217)', diff --git a/_posts/plotly_js/basic/bubble/2015-04-09-bubblechart.html b/_posts/plotly_js/basic/bubble/2015-04-09-bubblechart.html index 9cbb99505..ec70aa21b 100755 --- a/_posts/plotly_js/basic/bubble/2015-04-09-bubblechart.html +++ b/_posts/plotly_js/basic/bubble/2015-04-09-bubblechart.html @@ -12,7 +12,7 @@ y: [10, 11, 12, 13], mode: 'markers', marker: { - color: ['hsl(0,100,40)', 'hsl(33,100,40)', 'hsl(66,100,40)', 'hsl(99,100,40)'], + color: ['hsl(0,100%,40%)', 'hsl(33,100%,40%)', 'hsl(66,100%,40%)', 'hsl(99,100%,40%)'], size: [12, 22, 32, 42], opacity: [0.6, 0.7, 0.8, 0.9] }, diff --git a/_posts/plotly_js/basic/sunburst/2019-04-11-large-number-of-slices.html b/_posts/plotly_js/basic/sunburst/2019-04-11-large-number-of-slices.html index 4f547131c..4119bdf0f 100644 --- a/_posts/plotly_js/basic/sunburst/2019-04-11-large-number-of-slices.html +++ b/_posts/plotly_js/basic/sunburst/2019-04-11-large-number-of-slices.html @@ -31,5 +31,5 @@ }; -Plotly.newPlot('myDiv', data, layout, {showSendToCloud: true}); +Plotly.newPlot('myDiv', data, layout); }) diff --git a/_posts/plotly_js/basic/sunburst/2019-06-13-basic-branchvalues-total.html b/_posts/plotly_js/basic/sunburst/2019-06-13-basic-branchvalues-total.html index 79dd390f4..4089d57d0 100755 --- a/_posts/plotly_js/basic/sunburst/2019-06-13-basic-branchvalues-total.html +++ b/_posts/plotly_js/basic/sunburst/2019-06-13-basic-branchvalues-total.html @@ -29,6 +29,6 @@ }; -Plotly.newPlot('myDiv', data, layout, {showSendToCloud: true}) +Plotly.newPlot('myDiv', data, layout) myPlot = document.getElementById("myDiv"); diff --git a/_posts/plotly_js/financial/funnel/2019-06-27-funnelarea.html b/_posts/plotly_js/financial/funnel/2019-06-27-funnelarea.html index fd5d4c059..ff245bd4c 100755 --- a/_posts/plotly_js/financial/funnel/2019-06-27-funnelarea.html +++ b/_posts/plotly_js/financial/funnel/2019-06-27-funnelarea.html @@ -8,8 +8,8 @@ --- var gd = document.getElementById('myDiv'); var data = [{type: 'funnelarea', values: [5, 4, 3, 2, 1], text: ["The 1st", "The 2nd", "The 3rd", "The 4th", "The 5th"], - marker: {colors: ["59D4E8", "DDB6C6", "A696C8", "67EACA", "94D2E6"], - line: {color: ["3E4E88", "606470", "3E4E88", "606470", "3E4E88"], width: [2, 1, 5, 0, 3]}}, + marker: {colors: ["#59D4E8", "#DDB6C6", "#A696C8", "#67EACA", "#94D2E6"], + line: {color: ["#3E4E88", "#606470", "#3E4E88", "#606470", "#3E4E88"], width: [2, 1, 5, 0, 3]}}, textfont: {family: "Old Standard TT", size: 13, color: "black"}, opacity: 0.65}]; var layout = {margin: {l: 200 , r: 200}, funnelmode: "stack", showlegend: 'True'} diff --git a/_posts/plotly_js/financial/funnel/2019-06-27-part-of-whole-funnel.html b/_posts/plotly_js/financial/funnel/2019-06-27-part-of-whole-funnel.html index eab16fd2c..6a3769339 100755 --- a/_posts/plotly_js/financial/funnel/2019-06-27-part-of-whole-funnel.html +++ b/_posts/plotly_js/financial/funnel/2019-06-27-part-of-whole-funnel.html @@ -11,8 +11,8 @@ var data = [{type: 'funnel', y: ["Sales person A", "Sales person B", "Sales person C", "Sales person D", "Sales person E"], x: [1200, 909.4, 600.6, 300, 80], textposition: "inside", textinfo: "value+percent initial", - hoverinfo: 'percent total+x', opacity: 0.65, marker: {color: ["59D4E8", "DDB6C6", "A696C8", "67EACA", "94D2E6"], - line: {"width": [4, 2, 2, 3, 1, 1], color: ["3E4E88", "606470", "3E4E88", "606470", "3E4E88"]}}, + hoverinfo: 'percent total+x', opacity: 0.65, marker: {color: ["#59D4E8", "#DDB6C6", "#A696C8", "#67EACA", "#94D2E6"], + line: {"width": [4, 2, 2, 3, 1, 1], color: ["#3E4E88", "#606470", "#3E4E88", "#606470", "#3E4E88"]}}, connector: {line: {color: "royalblue", dash: "dot", width: 3}}}]; var layout = {margin: {l: 100}, width: 600, height: 500} diff --git a/_posts/plotly_js/fundamentals/colors/2026-08-04-color-formats.html b/_posts/plotly_js/fundamentals/colors/2026-08-04-color-formats.html new file mode 100644 index 000000000..b29101de9 --- /dev/null +++ b/_posts/plotly_js/fundamentals/colors/2026-08-04-color-formats.html @@ -0,0 +1,36 @@ +--- +name: Color Format Examples +language: plotly_js +suite: colors +order: 1 +sitemap: false +arrangement: horizontal +markdown_content: | + One bar per accepted color format, each written a different way but all resolving to a valid color. +--- +var data = [{ + type: 'bar', + x: ['named', 'hex', 'hex + alpha', 'rgb', 'rgb / alpha', 'hsl', 'hwb'], + y: [1, 1, 1, 1, 1, 1, 1], + marker: { + color: [ + 'crimson', + '#2ca02c', + '#1f77b4aa', + 'rgb(255 127 14)', + 'rgba(148, 103, 189, 0.45)', + 'hsl(180, 70%, 40%)', + 'hwb(320 10% 20%)' + ], + line: {color: '#444', width: 1} + } +}]; + +var layout = { + title: {text: 'Accepted Color String Formats'}, + yaxis: {visible: false}, + width: 700, + height: 400 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/fundamentals/colors/2026-08-04-colors_plotly_js_index.html b/_posts/plotly_js/fundamentals/colors/2026-08-04-colors_plotly_js_index.html new file mode 100644 index 000000000..9d3767ad2 --- /dev/null +++ b/_posts/plotly_js/fundamentals/colors/2026-08-04-colors_plotly_js_index.html @@ -0,0 +1,66 @@ +--- +description: How to specify colors in JavaScript. The CSS color string formats Plotly.js accepts for every color attribute. +display_as: file_settings +language: plotly_js +layout: base +name: Specifying Colors +order: 27 +page_type: example_index +permalink: javascript/colors/ +thumbnail: thumbnail/colorway.jpg +--- + +

    Every color attribute in Plotly.js — marker.color, line.color, +fillcolor, paper_bgcolor, and the rest — accepts a CSS color string. Plotly.js v4 parses +colors according to the CSS Color 4 specification.

    + +

    Accepted formats

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FormatNotesExamples
    Named colorsAny CSS color keyword'red', 'cornflowerblue', 'transparent'
    Hex3-, 4-, 6-, or 8-digit, always with a leading #'#f00', '#f00a', '#ff0000', '#ff0000aa'
    rgb(), rgba()Comma- or space-separated, with optional slash alpha'rgb(255, 0, 0)', 'rgb(255 0 0)', 'rgba(255, 0, 0, 0.5)', 'rgba(255 0 0 / 0.5)'
    hsl(), hsla()Percent units required on saturation and lightness'hsl(0, 100%, 50%)', 'hsl(0 100% 50% / 0.5)'
    hwb()Hue-whiteness-blackness, space-separated'hwb(0 0% 0%)'
    HueGiven in degrees, with or without the deg unit'hsl(0deg 100% 50%)', 'hsl(0 100% 50%)'
    + +

    These are all parsed in JavaScript and normalized to rgb() / rgba() before being written +to the DOM in the browser.

    + +

    A color string that Plotly.js cannot parse falls back to the attribute's default, so the figure renders in the wrong +color rather than failing loudly. If you are upgrading from an earlier version, see +Migrating to Plotly.js v4 for the formats that are no longer +accepted.

    + +

    These rules apply to color strings only. Numeric arrays used for color mapping, such as +marker.color: [1, 2, 3, 4] paired with a colorscale, are +unaffected.

    + +{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","colors" | sort: "order" %} +{% include posts/auto_examples.html examples=examples %} diff --git a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html index 0a906c626..3373b7748 100644 --- a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html +++ b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html @@ -1,10 +1,16 @@ --- -name: Display Edit in Chart Studio Modebar Button +name: Share with Plotly Cloud language: plotly_js suite: configuration -order: 7.1 +order: 6 sitemap: false arrangement: horizontal +markdown_content: | + The `sendChartToCloud` modebar button sends the chart to [Plotly Cloud](https://cloud.plotly.com) and opens it in a + new tab, where you can copy a sharing link and set the chart's visibility. A Plotly Cloud account is required. + + The button is shown by default. Set `showSendToCloud: false` to hide it, or set `plotlyServerURL` to send charts to + a self-hosted or alternate server instead of `cloud.plotly.com`. --- var data = [{ values: [19, 26, 55], @@ -14,13 +20,13 @@ var layout = { title: { - text: 'Show Edit in Chart Studio Modebar Button' + text: 'Share with Plotly Cloud' } }; var config = { - showEditInChartStudio: true, - plotlyServerURL: "https://chart-studio.plotly.com" + showSendToCloud: true, + plotlyServerURL: "https://cloud.plotly.com" }; Plotly.newPlot('myDiv', data, layout, config); diff --git a/_posts/plotly_js/fundamentals/config-options/2019-10-24-double-click-delay.html b/_posts/plotly_js/fundamentals/config-options/2019-10-24-double-click-delay.html index 29c457dae..ac3aae795 100755 --- a/_posts/plotly_js/fundamentals/config-options/2019-10-24-double-click-delay.html +++ b/_posts/plotly_js/fundamentals/config-options/2019-10-24-double-click-delay.html @@ -7,7 +7,7 @@ arrangement: horizontal markdown_content: | Sets the maximum delay between two consecutive clicks to be interpreted as a double-click in ms. This is the time interval between first mousedown, and' second mouseup. The default timing is 300 ms (less than half a second). - This setting propagates to all on-subplot double clicks, (except for geo, map, and mapbox). + This setting propagates to all on-subplot double clicks, (except for geo and map). --- var data = [{ type: "bar", diff --git a/_posts/plotly_js/fundamentals/config-options/2020-01-24-remove-modebarButtons.html b/_posts/plotly_js/fundamentals/config-options/2020-01-24-remove-modebarButtons.html index 75190eedb..f9704eae5 100644 --- a/_posts/plotly_js/fundamentals/config-options/2020-01-24-remove-modebarButtons.html +++ b/_posts/plotly_js/fundamentals/config-options/2020-01-24-remove-modebarButtons.html @@ -12,7 +12,8 @@
  • -'3D', `zoom3d`, `pan3d`, `orbitRotation`, `tableRotation`, `handleDrag3d`, `resetCameraDefault3d`, `resetCameraLastSave3d`, `hoverClosest3d`
  • -'Cartesian', `hoverClosestCartesian`, `hoverCompareCartesian`
  • -'Geo', `zoomInGeo`, `zoomOutGeo`, `resetGeo`, `hoverClosestGeo`
  • -
  • -'Other', `hoverClosestGl2d`, `hoverClosestPie`, `toggleHover`, `resetViews`, `toImage`, `sendDataToCloud`, `toggleSpikelines`, `resetViewMapbox`
  • +
  • -'Map', `zoomInMap`, `zoomOutMap`, `resetViewMap`
  • +
  • -'Other', `hoverClosestGl2d`, `hoverClosestPie`, `toggleHover`, `resetViews`, `toImage`, `sendChartToCloud`, `toggleSpikelines`
  • --- var data = [{ diff --git a/_posts/plotly_js/fundamentals/latex/2015-04-09-latex.html b/_posts/plotly_js/fundamentals/latex/2015-04-09-latex.html index 569c1754e..fc41e35cf 100644 --- a/_posts/plotly_js/fundamentals/latex/2015-04-09-latex.html +++ b/_posts/plotly_js/fundamentals/latex/2015-04-09-latex.html @@ -6,7 +6,7 @@ order: 0 sitemap: false --- -// remember to load MathJax.js?config=TeX-MML-AM_CHTML +// remember to load MathJax v3 or v4 (tex-svg.js) - see https://plotly.com/javascript/LaTeX/ var trace1 = { x: [1, 2, 3, 4], y: [1, 4, 9, 16], diff --git a/_posts/plotly_js/fundamentals/latex/2015-04-09-latex_plotly_js_index.html b/_posts/plotly_js/fundamentals/latex/2015-04-09-latex_plotly_js_index.html index d4f33c035..034837272 100755 --- a/_posts/plotly_js/fundamentals/latex/2015-04-09-latex_plotly_js_index.html +++ b/_posts/plotly_js/fundamentals/latex/2015-04-09-latex_plotly_js_index.html @@ -11,5 +11,22 @@ thumbnail: thumbnail/venn.jpg --- +

    Plotly.js renders LaTeX in titles, axis labels, annotations, and legend entries when +MathJax is loaded on the page. Wrap the expression in +$ delimiters, as in the example below.

    + +

    Plotly.js v4 supports MathJax v3 and v4, and uses the tex-svg component. Load one of the following +before plotly.js:

    + +
    <!-- MathJax v3 -->
    +<script src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-svg.js"></script>
    +<!-- or MathJax v4 -->
    +<script src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-svg.js"></script>
    + +

    MathJax v2 is no longer supported. If your page loads +MathJax.js?config=TeX-MML-AM_CHTML, replace it with one of the tags above — the +?config= query string is not used from MathJax v3 onward, since the component is +selected by the file you load.

    + {% assign examples = site.posts | where:"language","plotly_js" | where:"suite","latex" | sort: "order" %} {% include posts/auto_examples.html examples=examples %} \ No newline at end of file diff --git a/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md b/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md new file mode 100644 index 000000000..937926d0b --- /dev/null +++ b/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md @@ -0,0 +1,121 @@ +--- +description: How to use Plotly.js with TypeScript, including the types it ships and how to type figures, layouts, configs, and events. +display_as: guide +language: plotly_js +layout: base +name: Using Plotly.js with TypeScript +order: 4 +page_type: u-guide +permalink: javascript/guides/typescript/ +sitemap: false +thumbnail: thumbnail/mixed.jpg +--- +# Using Plotly.js with TypeScript + +Since v4, Plotly.js ships its own TypeScript type definitions. `package.json` points +`"types"` at `lib/index.d.ts`, so they are picked up automatically — there is no +separate `@types/*` package to install. + +## Importing + +The package provides a default namespace, named exports, and a global `Plotly` +namespace, so all of these work: + +```ts +import Plotly from 'plotly.js'; +// or +import * as Plotly from 'plotly.js'; +// or +import { newPlot } from 'plotly.js'; +import type { Layout, Data, TraceType } from 'plotly.js'; +``` + +A minimal typed figure: + +```ts +import { newPlot } from 'plotly.js'; +import type { Data, Layout } from 'plotly.js'; + +const data: Data[] = [{ type: 'scatter', x: [1, 2, 3], y: [4, 5, 6] }]; +const layout: Partial = { title: { text: 'Demo' } }; + +await newPlot(div, data, layout); +``` + +## Typing trace data + +`Data` is the union of every trace's data object, and it discriminates on `type`. +Annotating a figure as `Data[]` therefore gets each entry checked against the right +trace shape: + +```ts +const data: Data[] = [ + { type: 'bar', x: ['a', 'b'], y: [1, 2] }, // checked as BarData + { type: 'scatter', x: [1, 2], mode: 'lines' }, // checked as ScatterData +]; +``` + +Per-trace interfaces (`ScatterData`, `BarData`, `HeatmapData`, `ChoroplethData`, …) +are exported too. Reach for them when a value is guaranteed to be one trace type — +for example a helper that builds a `BarData` to push into a `Data[]` — and prefer the +`Data` union everywhere else. + +## Typing layout and config + +`Layout` describes the layout object you pass in, so use `Partial`: nearly +every field is optional, and the full interface would require all of them. +`Config` types the config argument. + +```ts +import type { Config, Layout } from 'plotly.js'; + +const layout: Partial = { + title: { text: 'Quarterly revenue' }, + yaxis: { tickformat: '$,.0f' }, +}; + +const config: Partial = { responsive: true, showSendToCloud: false }; +``` + +Note that `Layout` and `Data` are *input* shapes. The post-coerce internal shapes +that Plotly computes from them (often called "FullLayout" and "FullData") are +deliberately not exported. + +## Typing events + +Event payloads have their own interfaces, and `PlotlyHTMLElement` types the graph +div that `newPlot` resolves to: + +```ts +import { newPlot } from 'plotly.js'; +import type { PlotMouseEvent, PlotRelayoutEvent } from 'plotly.js'; + +const gd = await newPlot(div, data, layout); + +gd.on('plotly_click', (event: PlotMouseEvent) => { + console.log(event.points[0].x, event.points[0].y); +}); + +gd.on('plotly_relayout', (event: PlotRelayoutEvent) => { + console.log(event['xaxis.range[0]']); +}); +``` + +`PlotlyEventName` is the union of names accepted by `on()`, `once()`, and +`removeListener()`. + +## What else is exported + +| Category | Exports | +|---|---| +| Layout components | `LayoutAxis`, `Legend`, `Annotation`, `Shape`, `Slider`, `UpdateMenu`, `Scene`, and the other component interfaces | +| Config and image export | `Config`, `ToImgopts`, `DownloadImgopts`, `ToImageButtonOptions`, `ModeBarDefaultButtons`, `ModeBarButton`, `Icon` | +| Enums | String-literal unions such as `TraceType`, `AxisType`, `Calendar`, `Dash`, `PatternShape`, `XRef`, `YRef`, `MarkerSymbol`, `HoverInfo` — use these instead of `string` to get narrowing on attribute values | +| Shared sub-interfaces | `Font`, `ColorBar`, `HoverLabel`, `Pattern`, `Domain`, `LegendGroupTitle`, `TickFormatStops` | +| Events | `PlotMouseEvent`, `PlotHoverEvent`, `PlotSelectionEvent`, `PlotRelayoutEvent`, `PlotRestyleEvent`, `LegendClickEvent`, `SliderChangeEvent`, `PlotlyEventName` | +| Animation and frames | `AnimationOpts`, `Frame`, `Transition`, `TransitionEasing` | +| Templates | `Template`, `TemplateFigure`, `ValidateTemplateResult` | +| DOM and values | `PlotlyHTMLElement`, `Datum`, `TypedArray`, `Color`, `ColorScale` | + +`PlotType` is an alias for `TraceType`, so existing imports keep compiling. New code +should prefer `TraceType`. diff --git a/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble-map.html b/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble-map.html index 42144cbe1..7edc2db44 100755 --- a/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble-map.html +++ b/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble-map.html @@ -32,7 +32,8 @@ var layout = { 'geo': { 'scope': 'europe', - 'resolution': 50 + 'resolution': 50, + 'fitbounds': false } }; diff --git a/_posts/plotly_js/maps/bubble-maps/2015-08-12-USA-bubble-map.html b/_posts/plotly_js/maps/bubble-maps/2015-08-12-USA-bubble-map.html index 3ee9eae66..38c791f0d 100644 --- a/_posts/plotly_js/maps/bubble-maps/2015-08-12-USA-bubble-map.html +++ b/_posts/plotly_js/maps/bubble-maps/2015-08-12-USA-bubble-map.html @@ -61,6 +61,6 @@ }, }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-north-america.html b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-north-america.html index 2568e1e4d..520ac94ed 100755 --- a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-north-america.html +++ b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-north-america.html @@ -44,5 +44,5 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-world-robinson.html b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-world-robinson.html index 07b25c214..13d889851 100755 --- a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-world-robinson.html +++ b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth-world-robinson.html @@ -28,5 +28,5 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/choropleth-maps/2015-08-10-countrygdp-choropleth-map.html b/_posts/plotly_js/maps/choropleth-maps/2015-08-10-countrygdp-choropleth-map.html index 4ab8a485f..e1faa7781 100644 --- a/_posts/plotly_js/maps/choropleth-maps/2015-08-10-countrygdp-choropleth-map.html +++ b/_posts/plotly_js/maps/choropleth-maps/2015-08-10-countrygdp-choropleth-map.html @@ -48,5 +48,5 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/choropleth-maps/2015-08-11-US-pop-by-state-choropleth.html b/_posts/plotly_js/maps/choropleth-maps/2015-08-11-US-pop-by-state-choropleth.html index 798840157..7d8c28531 100644 --- a/_posts/plotly_js/maps/choropleth-maps/2015-08-11-US-pop-by-state-choropleth.html +++ b/_posts/plotly_js/maps/choropleth-maps/2015-08-11-US-pop-by-state-choropleth.html @@ -34,5 +34,5 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-access-token.html b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-access-token.html index dd3da713d..e60957f3d 100644 --- a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-access-token.html +++ b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-access-token.html @@ -27,7 +27,7 @@
    Filled `Scattermap` Trace
    var layout = { map: { - style: "stamen-terrain", + style: "open-street-map", center: { lon: -73, lat: 46 }, zoom: 5 }, diff --git a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-multi-filled-area.html b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-multi-filled-area.html index 600fa264e..374f41ea0 100644 --- a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-multi-filled-area.html +++ b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-multi-filled-area.html @@ -18,7 +18,7 @@ }] var layout = { - map: {style: "stamen-terrain", center: {lon: 40, lat: 20}, 'zoom': 1.5}, + map: {style: "open-street-map", center: {lon: 40, lat: 20}, 'zoom': 1.5}, showlegend: false, width:700, height: 700} diff --git a/_posts/plotly_js/maps/lines-on-maps/2015-08-12-us-flight-paths-map.html b/_posts/plotly_js/maps/lines-on-maps/2015-08-12-us-flight-paths-map.html index 153c32d5c..544ef4e10 100644 --- a/_posts/plotly_js/maps/lines-on-maps/2015-08-12-us-flight-paths-map.html +++ b/_posts/plotly_js/maps/lines-on-maps/2015-08-12-us-flight-paths-map.html @@ -45,6 +45,7 @@ showlegend: false, geo:{ scope: 'north america', + fitbounds: false, projection: { type: 'azimuthal equal area' }, @@ -54,6 +55,6 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/lines-on-maps/2015-11-07-lines-on-orthographic.html b/_posts/plotly_js/maps/lines-on-maps/2015-11-07-lines-on-orthographic.html index 53767f2a2..5226d6dc1 100755 --- a/_posts/plotly_js/maps/lines-on-maps/2015-11-07-lines-on-orthographic.html +++ b/_posts/plotly_js/maps/lines-on-maps/2015-11-07-lines-on-orthographic.html @@ -68,5 +68,5 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-geo-autofit.html b/_posts/plotly_js/maps/map-view/2026-08-04-geo-autofit.html new file mode 100644 index 000000000..8370f91d1 --- /dev/null +++ b/_posts/plotly_js/maps/map-view/2026-08-04-geo-autofit.html @@ -0,0 +1,41 @@ +--- +name: Auto-Fitting an Outline Map +language: plotly_js +suite: map-view +order: 3 +sitemap: false +arrangement: horizontal +markdown_content: | + `layout.geo.fitbounds` defaults to `'locations'`, so an outline map frames the locations it plots rather than the + whole world. Set `fitbounds: false` to get the pre-v4 world view, or supply your own view attributes — `center` + and `projection.scale` always turn auto-fitting off, and `projection.rotation`, `lonaxis.range`, and + `lataxis.range` do too except on a scoped subplot with a clipped projection. See + [Map View and Zoom](/javascript/map-view/) for the full breakdown. + + When `fitbounds` is active, the modebar's Reset view button returns to the fitted view rather than the world view. + + Note that a location whose territory crosses the ±180° antimeridian — the United States (the Aleutian Islands), + Russia, Fiji, New Zealand, and Antarctica — spans most of the globe's longitude, so a figure that includes one is + fitted very wide. Set the view explicitly in that case. +--- +var data = [{ + type: 'choropleth', + locations: ['BRA', 'ARG', 'CHL', 'PER', 'COL', 'BOL'], + locationmode: 'ISO-3', + z: [6, 5, 4, 3, 2, 1], + colorscale: 'Blues', + showscale: false +}]; + +var layout = { + title: {text: 'Fitted to the Plotted Locations'}, + geo: { + projection: {type: 'equirectangular'}, + showcountries: true, + countrycolor: 'rgb(255, 255, 255)' + }, + width: 700, + height: 450 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-geo-zoom-limits.html b/_posts/plotly_js/maps/map-view/2026-08-04-geo-zoom-limits.html new file mode 100644 index 000000000..329a46961 --- /dev/null +++ b/_posts/plotly_js/maps/map-view/2026-08-04-geo-zoom-limits.html @@ -0,0 +1,48 @@ +--- +name: Limiting Zoom on Outline Maps +language: plotly_js +suite: map-view +order: 4 +sitemap: false +arrangement: horizontal +markdown_content: | + `projection.minscale` and `projection.maxscale`, new in Plotly.js v4, clamp how far users can zoom a `geo` subplot. + Both are multipliers of `projection.scale`: `minscale: 0.5` stops zooming out past half the base scale and + `maxscale: 4` stops zooming in past four times it. The defaults — `minscale: 0` and no `maxscale` — leave zoom + unrestricted. + + Try scrolling on the map below: it will not zoom out below half, or in beyond four times, its initial scale. + + If the initial `projection.scale` falls outside the range you set, Plotly clamps it on the first render by dispatching + a zoom event, which emits one extra `plotly_relayout`. Listeners that distinguish user zooms from programmatic ones + should tolerate that single event at startup. +--- +var data = [{ + type: 'scattergeo', + mode: 'markers+text', + lon: [2.35, 13.4, 12.5, -3.7], + lat: [48.86, 52.52, 41.9, 40.42], + text: ['Paris', 'Berlin', 'Rome', 'Madrid'], + textposition: 'top center', + marker: {size: 10, color: '#636efa'} +}]; + +var layout = { + title: {text: 'Zoom Limited to 0.5x - 4x'}, + geo: { + scope: 'europe', + resolution: 50, + showland: true, + landcolor: 'rgb(235, 235, 235)', + projection: { + scale: 1, + minscale: 0.5, + maxscale: 4 + } + }, + showlegend: false, + width: 700, + height: 500 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html b/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html new file mode 100644 index 000000000..388805a1b --- /dev/null +++ b/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html @@ -0,0 +1,57 @@ +--- +description: How to control the initial view of maps in JavaScript. Examples of auto-fitting a map to its data, setting an explicit view, and limiting how far users can zoom. +display_as: maps +language: plotly_js +layout: base +name: Map View and Zoom +order: 12 +page_type: example_index +permalink: javascript/map-view/ +thumbnail: thumbnail/county-level-choropleth.jpg +--- + +

    Since Plotly.js v4, both outline-based geo subplots and tile-based map subplots auto-fit +their initial view to the data they plot. Before v4, both opened on a default world view and you had to supply a view +yourself to frame your data.

    + +

    Auto-fitting is controlled by fitbounds:

    + +
      +
    • layout.geo.fitbounds defaults to 'locations' and also accepts + 'geojson' (to frame the whole GeoJSON feature set rather than just the visible locations) and + false.
    • +
    • layout.map.fitbounds defaults to 'locations' and accepts false. + choroplethmap traces do not participate in auto-fitting, so a subplot containing one opens on the + default view.
    • +
    + +

    Supplying your own view attributes turns auto-fitting off for that subplot. On a tile map that means +map.center or map.zoom. On an outline map, which attributes count depends on the subplot:

    + + + + + + + + + + + + + + + +
    SubplotAttributes that turn auto-fitting off
    Any scope other than 'world'center.lon, center.lat, projection.scale
    'world' scope, clipped projection (orthographic, conic conformal, stereographic, azimuthal, …)the above, plus projection.rotation.lon, projection.rotation.lat, + lonaxis.range, lataxis.range
    'world' scope, unclipped projection (equirectangular, mercator, robinson, …)the above, plus projection.rotation.lon, lonaxis.range, + lataxis.range
    + +

    Note the first row: on a scoped subplot whose projection is clipped, lonaxis.range and +lataxis.range do not turn auto-fitting off — they still clip the drawing region, but the view is +centered on the data. Set fitbounds: false to honor the ranges as the view.

    + +

    Setting fitbounds: false without supplying a view restores the pre-v4 default view. The +'albers usa', 'craig', and 'satellite' projections never auto-fit.

    + +{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","map-view" | sort: "order" %} +{% include posts/auto_examples.html examples=examples %} diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-autofit.html b/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-autofit.html new file mode 100644 index 000000000..f85aa63a1 --- /dev/null +++ b/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-autofit.html @@ -0,0 +1,32 @@ +--- +name: Auto-Fitting a Tile Map to Data +language: plotly_js +suite: map-view +order: 1 +sitemap: false +arrangement: horizontal +markdown_content: | + With no `center` or `zoom` given, a `map` subplot frames the trace data on the first render. It re-fits when the data + changes — through `Plotly.restyle` of `lon`/`lat`, `Plotly.addTraces`, or `Plotly.deleteTraces` — until the user pans, + zooms, rotates, or tilts the map, after which the chosen view is preserved. Data that straddles the antimeridian is + framed the short way around, not across the whole globe. +--- +var data = [{ + type: 'scattermap', + mode: 'markers+text', + lon: [-122.4, -73.9, -87.6], + lat: [37.8, 40.7, 41.9], + text: ['San Francisco', 'New York', 'Chicago'], + textposition: 'top right', + marker: {size: 12, color: '#d62728'} +}]; + +var layout = { + map: {style: 'basic'}, + showlegend: false, + width: 700, + height: 450, + margin: {t: 30, b: 0, l: 0, r: 0} +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-explicit-view.html b/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-explicit-view.html new file mode 100644 index 000000000..9b0fe4efe --- /dev/null +++ b/_posts/plotly_js/maps/map-view/2026-08-04-tile-map-explicit-view.html @@ -0,0 +1,37 @@ +--- +name: Setting an Explicit Tile Map View +language: plotly_js +suite: map-view +order: 2 +sitemap: false +arrangement: horizontal +markdown_content: | + Passing `map.center` or `map.zoom` opts the subplot out of auto-fitting and opens it on exactly the view you give, + even if that view is the default `zoom: 1` centered on `(0, 0)`. Setting `map.fitbounds: false` without a view has + the same effect as the pre-v4 default: a world view at `zoom: 1`. + + `map.bounds`, which restricts how far users can pan, is independent of auto-fitting and can be combined with either. +--- +var data = [{ + type: 'scattermap', + mode: 'markers+text', + lon: [-122.4, -73.9, -87.6], + lat: [37.8, 40.7, 41.9], + text: ['San Francisco', 'New York', 'Chicago'], + textposition: 'top right', + marker: {size: 12, color: '#d62728'} +}]; + +var layout = { + map: { + style: 'basic', + center: {lon: -98, lat: 39}, + zoom: 2.5 + }, + showlegend: false, + width: 700, + height: 450, + margin: {t: 30, b: 0, l: 0, r: 0} +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html b/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html index 8105293a3..e26c2d6ca 100644 --- a/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html +++ b/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html @@ -10,19 +10,26 @@ thumbnail: thumbnail/area.jpg --- -

    With the release of Plotly.js v2.35.0, we are introducing a new set of trace types for maps with tile underlays:

    +

    Plotly.js v2.35.0 introduced a set of trace types for maps with tile underlays:

      -
    • Choroplethmap
    • -
    • Scattermap
    • -
    • Densitymap
    • +
    • Choroplethmap
    • +
    • Scattermap
    • +
    • Densitymap
    -

    These traces replace the existing Mapbox traces, Choroplethmapbox, Scattermapbox, - Densitymapbox, but use MapLibre as the map renderer rather than +

    These traces replace the Mapbox traces, Choroplethmapbox, Scattermapbox, and + Densitymapbox, and use MapLibre as the map renderer rather than Mapbox.

    +

    The Mapbox traces, the layout.mapbox subplot, and the mapboxAccessToken config + option were removed in Plotly.js v4, along with the plotly-mapbox.min.js partial bundle and + the zoomInMapbox, zoomOutMapbox, and resetViewMapbox modebar buttons (use + plotly-map.min.js and zoomInMap, zoomOutMap, resetViewMap). + If you are upgrading to v4, follow the steps below first. See + Migrating to Plotly.js v4 for the rest of the upgrade.

    +

    When switching to the new traces, keep an eye out for improved rendering performance, WebGL2 support, and over time, improved features in the Plotly map traces inherited from the MapLibre renderer, including projection support, globe views, terrain support, and support for modern mapping standards.

    @@ -48,9 +55,14 @@ outdoors, light, dark, satellite, and satellite-streets styles, using Mapbox styling. These style names are still available, but they now reference slightly different styles - provided by other tools. + provided by other tools. The three Stamen styles (stamen-terrain, stamen-toner, and + stamen-watercolor) are not available, because Stamen tiles are served by Stadia Maps and require + an API key — pass the URL of a style definition to use them. +
  • Remove mapboxAccessToken from your config, and any + mapbox://styles/mapbox/... style URLs, neither of which is supported. Custom MapLibre and Mapbox + JSON style URLs still work.
  • Note that Mapbox API keys are no longer required for Plotly-provided styles, but using external styles in your Plotly - maps remains supported with the existing API.

    \ No newline at end of file + maps remains supported with the existing API.

    diff --git a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-example.html b/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-example.html index 0284c4109..4e358366f 100644 --- a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-example.html +++ b/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-example.html @@ -7,6 +7,13 @@ arrangement: horizontal markdown_content: | Set `locationmode: 'country names'` to use full country names in `locations`. + + Names are resolved by [country-iso-search](https://github.com/plotly/country-iso-search), which matches a country's + name, its ISO-2 and UN M49 codes, and a curated set of aliases — historical and native names, and common alternates. + Matching ignores case, accents, and punctuation, so `'Cote d'Ivoire'`, `'Türkiye'`, and `'St. Kitts and Nevis'` all + resolve. See the library's + [country list](https://github.com/plotly/country-iso-search/blob/main/src/countries.ts) for every accepted name and + alias. A name that doesn't resolve is logged to the console and that location is skipped. --- var data = [{ type: 'choropleth', diff --git a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-warning.html b/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-warning.html deleted file mode 100644 index d243f2a1e..000000000 --- a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-country-names-warning.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -language: plotly_js -suite: outline-map-locations -order: 3.5 -sitemap: false -arrangement: horizontal -markdown_content: | - > How Plotly matches 'country names' will change in a future version. Matching will become stricter and some country names may no longer match. We recommend using `locationmode: 'ISO-3'` with ISO codes for `locations` to ensure consistent behavior across versions. ---- - diff --git a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-iso3-table.html b/_posts/plotly_js/maps/outline-map-locations/2019-07-03-iso3-table.html index 3c5f16104..4e93a8525 100644 --- a/_posts/plotly_js/maps/outline-map-locations/2019-07-03-iso3-table.html +++ b/_posts/plotly_js/maps/outline-map-locations/2019-07-03-iso3-table.html @@ -8,6 +8,15 @@ markdown_content: | The following ISO codes are supported when `locationmode='ISO-3'`: + Codes marked are only present in the higher-resolution map data. Since + [`geo.resolution`](https://plotly.com/javascript/reference/layout/geo/#layout-geo-resolution) defaults to `110`, + plotting one of those locations also needs `resolution: 50` on the `geo` subplot, or the location is skipped and + nothing is drawn for it. + + Rows marked *(grouped with ...)* are territories the map data draws inside another country's feature, listed here + so the code is easy to find. Plotting one shades that whole country, and the territory name itself is not accepted + as a value for `locationmode: 'country names'`. + @@ -21,38 +30,38 @@ - - + + - + - + - + - + - + - + - + - + - + - + @@ -61,24 +70,24 @@ - - + + - + - - + + - + - + @@ -96,7 +105,7 @@ - + @@ -104,28 +113,28 @@ - + - + - + - + - + - + - + @@ -134,18 +143,18 @@ - + - + - + @@ -154,53 +163,53 @@ - + - + - + - + - - + + - + - - + + - + - + - - + + - + - + - + @@ -211,24 +220,24 @@ - - - - - - - - + + + + + + + + - + - - - + + + @@ -249,27 +258,27 @@ - - + + - - + + - + - + @@ -279,4 +288,3 @@ [View full list of ISO-3 codes](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) --- - diff --git a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-12-US-airport-map.html b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-12-US-airport-map.html index 8eca7fd36..3b15fe899 100644 --- a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-12-US-airport-map.html +++ b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-12-US-airport-map.html @@ -59,6 +59,6 @@ } }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html index 72305d527..30db69748 100644 --- a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html +++ b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-08-15-north-america-precipitation-map.html @@ -46,6 +46,7 @@ var layout = { geo:{ scope: 'north america', + fitbounds: false, showland: true, landcolor: 'rgb(212,212,212)', subunitcolor: 'rgb(255,255,255)', @@ -61,18 +62,18 @@ long: -100 } }, - }, - longaxis: { - showgrid: true, - gridwidth: 0.5, - range: [ -140.0, -55.0 ], - dtick: 5 - }, - lataxis: { - showgrid: true, - gridwidth: 0.5, - range: [ 20.0, 60.0 ], - dtick: 5 + lonaxis: { + showgrid: true, + gridwidth: 0.5, + range: [ -140.0, -55.0 ], + dtick: 5 + }, + lataxis: { + showgrid: true, + gridwidth: 0.5, + range: [ 20.0, 60.0 ], + dtick: 5 + } }, title: {text: 'North America Precipitation'}, width: 600, diff --git a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_lines.html b/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_lines.html index 8b4f827d9..1ca987c2b 100644 --- a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_lines.html +++ b/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_lines.html @@ -66,6 +66,6 @@ showlegend: false }; - Plotly.newPlot("myDiv", data, layout, {showLink: false}); + Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/maps/scattermapbox/2019-09-02-symbols.html b/_posts/plotly_js/maps/scattermapbox/2019-09-02-symbols.html index a66df21a8..dddc7149b 100644 --- a/_posts/plotly_js/maps/scattermapbox/2019-09-02-symbols.html +++ b/_posts/plotly_js/maps/scattermapbox/2019-09-02-symbols.html @@ -6,7 +6,9 @@ sitemap: false arrangement: horizontal markdown_content: | - This example uses [symbol attribute](https://plotly.com/javascript/reference/scattermap/#scattermap-marker-symbol) to set the marker symbol. + This example uses the [symbol attribute](https://plotly.com/javascript/reference/scattermap/#scattermap-marker-symbol) to set the marker symbol. + Symbol names come from the [Maki icon set](https://labs.mapbox.com/maki-icons/) (updated to Maki 8 in Plotly.js v4). + Since v4, icons are tinted with `marker.color`; earlier versions always drew them in black. --- var data = [ { @@ -14,7 +16,7 @@ mode: "markers+text+lines", lon: [-75, -80, -50], lat: [45, 20, -20], - marker: { size: 20, symbol: ["bus", "harbor", "airport"] }, + marker: { size: 20, color: "black", symbol: ["bus", "harbor", "airport"] }, text: ["Bus", "Harbor", "Airport"], textposition: "bottom right" } diff --git a/_posts/plotly_js/scientific/quiver/2026-08-04-basic-quiver.html b/_posts/plotly_js/scientific/quiver/2026-08-04-basic-quiver.html new file mode 100644 index 000000000..e2b4d3d33 --- /dev/null +++ b/_posts/plotly_js/scientific/quiver/2026-08-04-basic-quiver.html @@ -0,0 +1,27 @@ +--- +name: Basic Quiver Plot +language: plotly_js +suite: quiver +order: 1 +sitemap: false +arrangement: horizontal +markdown_content: | + Each arrow is anchored at an `(x, y)` position and points along the `(u, v)` vector given for that position. +--- +var data = [{ + type: 'quiver', + x: [0, 1, 2, 0, 1, 2], + y: [0, 0, 0, 1, 1, 1], + u: [1, 0.5, 0, 0.5, 0, -0.5], + v: [0, 0.5, 1, 0.5, 1, 0.5] +}]; + +var layout = { + title: {text: 'Basic Quiver Plot'}, + xaxis: {title: {text: 'x'}}, + yaxis: {title: {text: 'y'}}, + width: 600, + height: 400 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-anchor-size.html b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-anchor-size.html new file mode 100644 index 000000000..6f3dd4946 --- /dev/null +++ b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-anchor-size.html @@ -0,0 +1,47 @@ +--- +name: Arrow Anchor and Length +language: plotly_js +suite: quiver +order: 2 +sitemap: false +arrangement: horizontal +markdown_content: | + This example plots the rotational field `(u, v) = (-y, x)` on a grid. `anchor: 'center'` centers each arrow on its + grid point instead of starting it there, and `sizeref` scales every arrow by the same factor. With the default + `sizemode: 'scaled'`, arrow lengths are normalized against the longest vector in the field, so the grid stays legible + however large the underlying values are. +--- +var x = []; +var y = []; +var u = []; +var v = []; + +for (var i = -2; i <= 2; i++) { + for (var j = -2; j <= 2; j++) { + x.push(i); + y.push(j); + u.push(-j); + v.push(i); + } +} + +var data = [{ + type: 'quiver', + x: x, + y: y, + u: u, + v: v, + anchor: 'center', + sizeref: 0.8, + marker: {color: '#636efa'} +}]; + +var layout = { + title: {text: 'Rotational Field, Arrows Centered on Each Point'}, + xaxis: {title: {text: 'x'}}, + yaxis: {title: {text: 'y'}, scaleanchor: 'x'}, + width: 600, + height: 500 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-color.html b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-color.html new file mode 100644 index 000000000..f94bf288e --- /dev/null +++ b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-color.html @@ -0,0 +1,57 @@ +--- +name: Color Arrows by a Scalar Field +language: plotly_js +suite: quiver +order: 3 +sitemap: false +arrangement: horizontal +markdown_content: | + Pass `marker.color` an array with one value per arrow, together with the usual colorscale attributes + (`marker.colorscale`, `marker.cmin`, `marker.cmax`, `marker.showscale`, `marker.colorbar`), to color each arrow by + that value. Here the arrows are colored by their own magnitude. If you enable a colorscale without supplying a + `marker.color` array, arrows are colored by vector magnitude automatically. A single (non-array) `marker.color` + paints the whole field one color. +--- +var x = []; +var y = []; +var u = []; +var v = []; +var speed = []; + +// A shear flow: horizontal velocity grows with y, with a small vertical component. +for (var i = 0; i <= 8; i++) { + for (var j = 0; j <= 6; j++) { + var ui = 0.2 + 0.25 * j; + var vi = 0.4 * Math.sin(i / 2); + x.push(i); + y.push(j); + u.push(ui); + v.push(vi); + speed.push(Math.sqrt(ui * ui + vi * vi)); + } +} + +var data = [{ + type: 'quiver', + x: x, + y: y, + u: u, + v: v, + marker: { + color: speed, + colorscale: 'Viridis', + showscale: true, + colorbar: {title: {text: 'speed'}}, + line: {width: 2} + } +}]; + +var layout = { + title: {text: 'Shear Flow, Arrows Colored by Speed'}, + xaxis: {title: {text: 'x'}}, + yaxis: {title: {text: 'y'}}, + width: 700, + height: 500 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-style.html b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-style.html new file mode 100644 index 000000000..72ef32ab8 --- /dev/null +++ b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver-style.html @@ -0,0 +1,66 @@ +--- +name: Style Arrow Lines and Heads +language: plotly_js +suite: quiver +order: 4 +sitemap: false +arrangement: horizontal +markdown_content: | + `marker.line.width` and `marker.line.dash` style the arrow shafts, and `marker.arrowsize` scales the arrowhead + relative to the line width — the default of `1` draws a head about three times as wide as the shaft. This example + overlays a measured field (solid) on a modelled one (dashed) so the two can be compared arrow for arrow. +--- +var x = []; +var y = []; +var uModel = []; +var vModel = []; +var uMeasured = []; +var vMeasured = []; + +for (var i = 0; i <= 5; i++) { + for (var j = 0; j <= 5; j++) { + x.push(i); + y.push(j); + uModel.push(1); + vModel.push(0.15 * (j - 2.5)); + uMeasured.push(0.9); + vMeasured.push(0.15 * (j - 2.5) + 0.25 * Math.cos(i)); + } +} + +var data = [{ + type: 'quiver', + name: 'model', + x: x, + y: y, + u: uModel, + v: vModel, + marker: { + color: '#7f7f7f', + arrowsize: 0.8, + line: {width: 2, dash: 'dot'} + } +}, { + type: 'quiver', + name: 'measured', + x: x, + y: y, + u: uMeasured, + v: vMeasured, + marker: { + color: '#d62728', + arrowsize: 1.2, + line: {width: 3} + } +}]; + +var layout = { + title: {text: 'Modelled and Measured Fields'}, + xaxis: {title: {text: 'x'}}, + yaxis: {title: {text: 'y'}}, + showlegend: true, + width: 700, + height: 500 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/scientific/quiver/2026-08-04-quiver_plotly_js_index.html b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver_plotly_js_index.html new file mode 100644 index 000000000..ed77e328d --- /dev/null +++ b/_posts/plotly_js/scientific/quiver/2026-08-04-quiver_plotly_js_index.html @@ -0,0 +1,37 @@ +--- +description: How to make a D3.js-based quiver plot in JavaScript. Quiver plots show a 2D vector field as an array of arrows. +display_as: scientific +language: plotly_js +layout: base +name: Quiver Plots +order: 13 +page_type: example_index +permalink: javascript/quiver-plots/ +thumbnail: thumbnail/quiver-plot.jpg +--- + +

    The quiver trace type, new in Plotly.js v4, visualizes a 2D vector field as an array of arrows. A +quiver trace takes four arrays of the same length: x and y give the position of each arrow, +and u and v give the vector components at that position. Arrow direction and length come +from (u, v).

    + +

    Arrow placement and scaling are controlled by:

    + +
      +
    • anchor — which part of the arrow sits at (x, y): 'tail' (the default), + 'tip', or 'center'.
    • +
    • sizemode'scaled' (the default) normalizes arrow lengths against the largest vector + and the density of points, so a dense field stays readable; 'raw' draws each arrow at its own + magnitude.
    • +
    • sizeref — a multiplier applied on top of sizemode. Values below 1 shorten every + arrow, values above 1 lengthen them.
    • +
    • anglemode — with 'data', angles are measured in data coordinates, so they change when + you zoom one axis more than the other; with 'paper', angles are fixed in pixel space.
    • +
    + +

    Arrow lines are styled with marker.line.width and marker.line.dash, and the arrowhead is +scaled relative to the line width by marker.arrowsize. Quiver traces also support box and lasso +selection through the standard selected / unselected marker attributes.

    + +{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","quiver" | sort: "order" %} +{% include posts/auto_examples.html examples=examples %} diff --git a/_posts/plotly_js/statistical/continuous-error-bars/2016-02-15-continuous-variable.html b/_posts/plotly_js/statistical/continuous-error-bars/2016-02-15-continuous-variable.html index e8102ebca..e11b6b035 100644 --- a/_posts/plotly_js/statistical/continuous-error-bars/2016-02-15-continuous-variable.html +++ b/_posts/plotly_js/statistical/continuous-error-bars/2016-02-15-continuous-variable.html @@ -37,7 +37,7 @@ x: date_list(2001,01,01,2001,02,01,50), y: random_number(50,20), line: {width: 0}, - marker: {color: "444"}, + marker: {color: "#444"}, mode: "lines", name: "Lower Bound", type: "scatter" @@ -60,7 +60,7 @@ fill: "tonexty", fillcolor: "rgba(68, 68, 68, 0.3)", line: {width: 0}, - marker: {color: "444"}, + marker: {color: "#444"}, mode: "lines", name: "Upper Bound", type: "scatter" diff --git a/_posts/plotly_js/statistical/error-bar/2015-04-09-error-bar-style.html b/_posts/plotly_js/statistical/error-bar/2015-04-09-error-bar-style.html index 0b76dfce6..55c14029d 100755 --- a/_posts/plotly_js/statistical/error-bar/2015-04-09-error-bar-style.html +++ b/_posts/plotly_js/statistical/error-bar/2015-04-09-error-bar-style.html @@ -46,4 +46,4 @@ type: 'scatter' }; var data = [trace1, trace2]; -Plotly.newPlot('myDiv', data, {}, {showSendToCloud: true}); +Plotly.newPlot('myDiv', data, {}); diff --git a/_posts/plotly_js/subplot/mixed-subplots/2017-01-20-mixed-subplots.html b/_posts/plotly_js/subplot/mixed-subplots/2017-01-20-mixed-subplots.html index 442b32f5e..3fc235bfd 100644 --- a/_posts/plotly_js/subplot/mixed-subplots/2017-01-20-mixed-subplots.html +++ b/_posts/plotly_js/subplot/mixed-subplots/2017-01-20-mixed-subplots.html @@ -85,6 +85,7 @@ y: [0.02, 0.98] }, scope: 'world', + fitbounds: false, projection: { type: 'orthographic' }, @@ -140,6 +141,6 @@ domain: [0.6, 1]}, }; -Plotly.newPlot("myDiv", data, layout, {showLink: false}); +Plotly.newPlot("myDiv", data, layout); }); diff --git a/_posts/plotly_js/subplot/multiple-axes/2015-04-09-multiple-axes-double.html b/_posts/plotly_js/subplot/multiple-axes/2015-04-09-multiple-axes-double.html index 8eed0bc93..f4a03159e 100755 --- a/_posts/plotly_js/subplot/multiple-axes/2015-04-09-multiple-axes-double.html +++ b/_posts/plotly_js/subplot/multiple-axes/2015-04-09-multiple-axes-double.html @@ -5,6 +5,10 @@ order: 5 sitemap: false arrangement: horizontal +markdown_content: | + Set `overlaying` on the second axis to draw both traces in the same plotting area. The overlaying axis places its + ticks at the base axis's tick positions, labeled with its own range — see + [Tick Positions on Overlaying Axes](#tick-positions-on-overlaying-axes) to give it an independent grid instead. --- var trace1 = { x: [1, 2, 3], diff --git a/_posts/plotly_js/subplot/multiple-axes/2026-08-04-overlaying-axis-tickmode.html b/_posts/plotly_js/subplot/multiple-axes/2026-08-04-overlaying-axis-tickmode.html new file mode 100644 index 000000000..6956acc75 --- /dev/null +++ b/_posts/plotly_js/subplot/multiple-axes/2026-08-04-overlaying-axis-tickmode.html @@ -0,0 +1,53 @@ +--- +name: Tick Positions on Overlaying Axes +language: plotly_js +suite: multiple-axes +order: 7 +sitemap: false +arrangement: horizontal +markdown_content: | + An axis that overlays another axis defaults to [tickmode](https://plotly.com/javascript/reference/layout/yaxis/#layout-yaxis-tickmode) + `'sync'`: it draws its ticks and gridlines at the base axis's positions and computes the labels from its own range, so + the two axes share one grid. Set `tickmode: 'auto'` on the overlaying axis to let it choose its own tick positions + instead, which draws a second, independent set of gridlines. + + Prior to Plotly.js v4, `'auto'` was the default on overlaying axes. When the base axis is `type: 'category'` or + `'multicategory'`, `'auto'` is still the default. +--- +var trace1 = { + x: [1, 2, 3], + y: [40, 50, 60], + name: 'yaxis data', + type: 'scatter' +}; + +var trace2 = { + x: [2, 3, 4], + y: [4, 5, 6], + name: 'yaxis2 data', + yaxis: 'y2', + type: 'scatter' +}; + +var data = [trace1, trace2]; + +var layout = { + title: {text: 'Independent Ticks on an Overlaying Axis'}, + yaxis: { + title: { + text: 'yaxis title' + } + }, + yaxis2: { + title: { + text: 'yaxis2 title', + font: {color: 'rgb(148, 103, 189)'} + }, + tickfont: {color: 'rgb(148, 103, 189)'}, + overlaying: 'y', + side: 'right', + tickmode: 'auto' + } +}; + +Plotly.newPlot('myDiv', data, layout); From 16fd8d0827f87ac455be0f374964bac9c8c2c6dd Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 16:43:32 -0600 Subject: [PATCH 19/25] Remove Mapbox references --- .github/workflows/build.yml | 5 -- _includes/posts/auto_examples.html | 6 +-- .../2015-09-24-config-opt-link-text.html | 27 ----------- .../2015-09-24-config-opt-showlink.html | 32 ------------- .../2019-07-03-outline-map-locations.html | 2 +- ...2015-07-11-bubble_maps_plotlyjs_index.html | 2 +- ...2019-08-16-choropleth_plotly_js_index.html | 2 +- .../2024-06-29-basic-mapbox.html | 27 ----------- ...2015-07-11-choropleth_plotly_js_index.html | 2 +- .../2019-08-16-basic_density_mapbox.html | 20 ++++++-- .../2019-08-16-density_plotly_js_index.html | 2 +- .../2019-08-16-light-tile-mapbox.html | 27 ----------- .../2019-09-02-fill-area_plotly_js_index.html | 2 +- ...5-07-11-lines_on_maps_plotly_js_index.html | 2 +- .../2026-08-04-map-view_plotly_js_index.html | 2 +- .../2019-08-16-access-token.html | 29 ------------ .../2019-08-16-how-layers-work.html | 12 +++++ ...9-08-20-mapbox-layers_plotly_js_index.html | 2 +- ...9-migrate-to-maplibre_plotly_js_index.html | 2 +- ...15-07-11-scatter_maps_plotly_js_index.html | 2 +- ...2017-08-01-scattermapbox_basic-mapbox.html | 46 ------------------- ...7-08-01-scattermapbox_plotly_js_index.html | 2 +- 22 files changed, 44 insertions(+), 211 deletions(-) delete mode 100644 _posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-link-text.html delete mode 100644 _posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-showlink.html delete mode 100644 _posts/plotly_js/maps/choropleth-mapbox/2024-06-29-basic-mapbox.html delete mode 100755 _posts/plotly_js/maps/density-mapbox/2019-08-16-light-tile-mapbox.html delete mode 100644 _posts/plotly_js/maps/mapbox-layers/2019-08-16-access-token.html delete mode 100644 _posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_basic-mapbox.html diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a9f326b3..868763a97 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,10 +33,6 @@ jobs: - name: Fetch upstream docs run: make fetch_upstream_files - - name: Set up Mapbox token - run: | - echo "token: ${{ secrets.MAPBOX_TOKEN }}" > _data/mapbox_token.yml - - name: Build site run: | python front-matter-ci.py _posts @@ -49,7 +45,6 @@ jobs: md5sum all_static/css/main.css | cut -d ' ' -f 1 > _data/cache_bust_css.yml bundle exec jekyll build cp python/sitemap.xml _site/python/sitemap.xml - rm _data/mapbox_token.yml - name: Create Percy snapshots run: | diff --git a/_includes/posts/auto_examples.html b/_includes/posts/auto_examples.html index 8c1192cd4..00540f9c4 100755 --- a/_includes/posts/auto_examples.html +++ b/_includes/posts/auto_examples.html @@ -41,8 +41,8 @@

    {% endif %} diff --git a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-link-text.html b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-link-text.html deleted file mode 100644 index e3f409e76..000000000 --- a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-link-text.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Customize The `Edit Chart` Link Text -language: plotly_js -suite: configuration -order: 7 -sitemap: false -arrangement: horizontal ---- -var data = [{ - z: [[0, 1, 2, 3, 4, 5, 6], - [1, 9, 4, 7, 5, 2, 4], - [2, 4, 2, 1, 6, 9, 3]], - type: 'heatmap'}] - -var layout = { - title: { - text: 'Customize The Edit Chart Link Text' - } -}; - -var config = { - showLink: true, - plotlyServerURL: "https://chart-studio.plotly.com", - linkText: 'This text is custom!' -}; - -Plotly.newPlot('myDiv', data, layout, config) diff --git a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-showlink.html b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-showlink.html deleted file mode 100644 index b75ab5859..000000000 --- a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-opt-showlink.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Display the `Edit Chart` Link -language: plotly_js -suite: configuration -order: 6 -sitemap: false -arrangement: horizontal -markdown_content: | - Note: showLink now defaults to false. ---- - -var trace1 = { - x: [0, 1, 2, 3, 4, 5, 6], - y: [1, 9, 4, 7, 5, 2, 4], - mode: 'lines+markers', - type: 'scatter' -}; - -var data = [trace1]; - -var layout = { - title: { - text: 'Display the Edit Chart Link' - } -}; - -var config = { - showLink: true, - plotlyServerURL: "https://chart-studio.plotly.com" -}; - -Plotly.newPlot('myDiv', data, layout, config); diff --git a/_posts/plotly_js/maps/2019-07-03-outline-map-locations.html b/_posts/plotly_js/maps/2019-07-03-outline-map-locations.html index 6da1cfee7..ba206c630 100644 --- a/_posts/plotly_js/maps/2019-07-03-outline-map-locations.html +++ b/_posts/plotly_js/maps/2019-07-03-outline-map-locations.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Locations for Outline-based Maps -order: 11 +order: 10 page_type: example_index permalink: javascript/outline-map-locations/ thumbnail: thumbnail/choropleth.jpg diff --git a/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble_maps_plotlyjs_index.html b/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble_maps_plotlyjs_index.html index 2effd4079..a0c1b669d 100755 --- a/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble_maps_plotlyjs_index.html +++ b/_posts/plotly_js/maps/bubble-maps/2015-07-11-bubble_maps_plotlyjs_index.html @@ -5,7 +5,7 @@ language: plotly_js layout: base name: Bubble Maps -order: 6 +order: 5 page_type: example_index permalink: javascript/bubble-maps/ redirect_from: javascript-graphing-library/bubble-maps/ diff --git a/_posts/plotly_js/maps/choropleth-mapbox/2019-08-16-choropleth_plotly_js_index.html b/_posts/plotly_js/maps/choropleth-mapbox/2019-08-16-choropleth_plotly_js_index.html index e759a0652..96df0f823 100644 --- a/_posts/plotly_js/maps/choropleth-mapbox/2019-08-16-choropleth_plotly_js_index.html +++ b/_posts/plotly_js/maps/choropleth-mapbox/2019-08-16-choropleth_plotly_js_index.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Choropleth Tile Map -order: 4 +order: 3 page_type: example_index permalink: javascript/tile-county-choropleth/ redirect_from: javascript/mapbox-county-choropleth/ diff --git a/_posts/plotly_js/maps/choropleth-mapbox/2024-06-29-basic-mapbox.html b/_posts/plotly_js/maps/choropleth-mapbox/2024-06-29-basic-mapbox.html deleted file mode 100644 index 0df34d165..000000000 --- a/_posts/plotly_js/maps/choropleth-mapbox/2024-06-29-basic-mapbox.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Basic Tile using Mapbox -language: plotly_js -suite: tile-county-choropleth -order: 4 -sitemap: false -arrangement: horizontal -markdown_content: | - - > Mapbox traces are deprecated and may be removed in a future version of Plotly.js. - - Earlier examples use traces that render with [Maplibre GL JS](https://maplibre.org/maplibre-gl-js/docs/). - These traces were introduced in Plotly.js 2.35.0 and replace Mapbox-based tile maps, - which are now deprecated. Here's one of the earlier examples using the Mapbox-based `choroplethmapbox` trace ---- - -var data = [{ - type: "choroplethmapbox", locations: ["NY", "MA", "VT"], z: [-50, -10, -20], - geojson: "https://raw.githubusercontent.com/python-visualization/folium/master/examples/data/us-states.json" -}]; - -var layout = {mapbox: {center: {lon: -74, lat: 43}, zoom: 3.5}, - width: 600, height:400}; - -var config = {mapboxAccessToken: "your access token"}; - -Plotly.newPlot('myDiv', data, layout, config); \ No newline at end of file diff --git a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth_plotly_js_index.html b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth_plotly_js_index.html index 60cce827f..f8aeed399 100755 --- a/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth_plotly_js_index.html +++ b/_posts/plotly_js/maps/choropleth-maps/2015-07-11-choropleth_plotly_js_index.html @@ -5,7 +5,7 @@ language: plotly_js layout: base name: Choropleth Maps -order: 9 +order: 8 permalink: javascript/choropleth-maps/ redirect_from: javascript-graphing-library/choropleth-maps/ thumbnail: thumbnail/choropleth.jpg diff --git a/_posts/plotly_js/maps/density-mapbox/2019-08-16-basic_density_mapbox.html b/_posts/plotly_js/maps/density-mapbox/2019-08-16-basic_density_mapbox.html index 6c168a371..4881cf80e 100755 --- a/_posts/plotly_js/maps/density-mapbox/2019-08-16-basic_density_mapbox.html +++ b/_posts/plotly_js/maps/density-mapbox/2019-08-16-basic_density_mapbox.html @@ -1,5 +1,5 @@ --- -name: Stamen Terrain Tile +name: Custom Tile Style language: plotly_js suite: tile-density-heatmaps order: 5 @@ -8,10 +8,24 @@ arrangement: horizontal markdown_content: | + As well as the built-in style names, `layout.map.style` accepts the URL of any + [MapLibre style definition](https://maplibre.org/maplibre-style-spec/). The example below points at Carto's Positron + style JSON directly. + Some providers require an API key, which you append to the style URL. The `stamen-terrain`, `stamen-toner`, and + `stamen-watercolor` style names are not built in for this reason: Stamen tiles are served by + [Stadia Maps](https://stadiamaps.com/), which requires an account. To use them, sign up and add your own key: + + ``` + map: {style: 'https://tiles.stadiamaps.com/styles/stamen_watercolor.json?api_key=YOUR_STADIA_KEY'} + ``` --- -var data = [{type: 'densitymapbox', lon: [10, 20, 30], lat: [15, 25, 35], z: [1, 3, 2]}]; +var data = [{type: 'densitymap', lon: [10, 20, 30], lat: [15, 25, 35], z: [1, 3, 2]}]; -var layout = {width: 600, height: 400, mapbox: {style: 'https://tiles.stadiamaps.com/styles/stamen_watercolor.json?api_key=YOUR-API-KEY'}}; +var layout = { + width: 600, + height: 400, + map: {style: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json'} +}; Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/maps/density-mapbox/2019-08-16-density_plotly_js_index.html b/_posts/plotly_js/maps/density-mapbox/2019-08-16-density_plotly_js_index.html index 7bc025f88..4b6921182 100755 --- a/_posts/plotly_js/maps/density-mapbox/2019-08-16-density_plotly_js_index.html +++ b/_posts/plotly_js/maps/density-mapbox/2019-08-16-density_plotly_js_index.html @@ -5,7 +5,7 @@ language: plotly_js layout: base name: Tile Density Heatmap -order: 3 +order: 2 page_type: example_index permalink: javascript/tile-density-heatmaps/ redirect_from: javascript/mapbox-density-heatmaps/ diff --git a/_posts/plotly_js/maps/density-mapbox/2019-08-16-light-tile-mapbox.html b/_posts/plotly_js/maps/density-mapbox/2019-08-16-light-tile-mapbox.html deleted file mode 100755 index ed0cd3576..000000000 --- a/_posts/plotly_js/maps/density-mapbox/2019-08-16-light-tile-mapbox.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Light Tile (Mapbox) - Requires Token -language: plotly_js -layout: base -suite: tile-density-heatmaps -order: 7 -sitemap: false -arrangement: horizontal -markdown_content: | - **Mapbox traces are deprecated and may be removed in a future version of Plotly.js.** - - Earlier examples use traces that render with [Maplibre GL JS](https://maplibre.org/maplibre-gl-js/docs/). - These traces were introduced in Plotly.js 2.35.0 and replace Mapbox-based tile maps, - which are now deprecated. Here's one of the earlier examples written using the Mapbox-based `densitymapbox` trace. ---- -var data = [ - {type: "densitymapbox", lon: [10, 20, 30], lat: [15, 25, 35], z: [1, 3, 2], - radius: 50, colorbar: {y: 1, yanchor: 'top', len: 0.45}}, - {type: 'densitymapbox', lon: [-10, -20, -30], lat: [15, 25, 35], - radius: [50, 100, 10], colorbar: {y: 0, yanchor: 'bottom', len: 0.45} - }]; - -var layout = {mapbox: {style: 'light', center: {lat: 20}}, width: 600, height: 400}; - -var config = {mapboxAccessToken: "your access token"}; - -Plotly.newPlot('myDiv', data, layout, config); diff --git a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-fill-area_plotly_js_index.html b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-fill-area_plotly_js_index.html index 2f563f4bf..1a98cefc7 100644 --- a/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-fill-area_plotly_js_index.html +++ b/_posts/plotly_js/maps/fill-area-on-mapbox/2019-09-02-fill-area_plotly_js_index.html @@ -5,7 +5,7 @@ language: plotly_js layout: base name: Filled Area on Tile Maps -order: 10 +order: 9 page_type: u-guide permalink: javascript/filled-area-on-map/ redirect_from: javascript/filled-area-on-mapbox/ diff --git a/_posts/plotly_js/maps/lines-on-maps/2015-07-11-lines_on_maps_plotly_js_index.html b/_posts/plotly_js/maps/lines-on-maps/2015-07-11-lines_on_maps_plotly_js_index.html index b22ea5ada..d758b1651 100755 --- a/_posts/plotly_js/maps/lines-on-maps/2015-07-11-lines_on_maps_plotly_js_index.html +++ b/_posts/plotly_js/maps/lines-on-maps/2015-07-11-lines_on_maps_plotly_js_index.html @@ -6,7 +6,7 @@ language: plotly_js layout: base name: Lines on Maps -order: 5 +order: 4 page_type: example_index permalink: javascript/lines-on-maps/ redirect_from: javascript-graphing-library/lines-on-maps/ diff --git a/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html b/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html index 388805a1b..700920a6c 100644 --- a/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html +++ b/_posts/plotly_js/maps/map-view/2026-08-04-map-view_plotly_js_index.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Map View and Zoom -order: 12 +order: 11 page_type: example_index permalink: javascript/map-view/ thumbnail: thumbnail/county-level-choropleth.jpg diff --git a/_posts/plotly_js/maps/mapbox-layers/2019-08-16-access-token.html b/_posts/plotly_js/maps/mapbox-layers/2019-08-16-access-token.html deleted file mode 100644 index aa232bf04..000000000 --- a/_posts/plotly_js/maps/mapbox-layers/2019-08-16-access-token.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Mapbox Maps and Access Tokens -language: plotly_js -suite: map-layers -order: 10 -sitemap: false -arrangement: horizontal -markdown_content: | - - > Mapbox traces are deprecated and may be removed in a future version of Plotly.js. - - The word "mapbox" in the trace names and `layout.mapbox` refers to the Mapbox GL JS open-source library. - If your basemap in `layout.mapbox.style` uses data from the Mapbox *service*, - then you will need to register for a free account at https://mapbox.com/ and obtain a Mapbox Access token. - If your basemap uses data from the [Stadia Maps service](https://www.stadiamaps.com) (see below for details), you'll need to register for a Stadia Maps account and token. - - To use a token, provide it as `mapboxAccessToken` in the `setPlotConfig` function, or as a variable that would be passed as an argument of `newPlot`. - If your `layout.mapbox.style` does not use data from the Mapbox service, you do *not* need to register for a Mapbox account. -

    Base Maps in `layout.mapbox.style`
    - The accepted values for `layout.mapbox.style` are one of the following tiles. -
      -
    1. `"white-bg"` yields an empty white canvas which results in no external HTTP requests
    2. -
    3. `"open-street-map"`, `"carto-positron"`, or `"carto-darkmatter"` yield maps composed of *raster* tiles from various public tile servers which do not require signups or access tokens
    4. -
    5. `"stamen-terrain"`, `"stamen-toner"` or `"stamen-watercolor"` yield maps composed of *raster* tiles from the [Stadia Maps service](https://stadiamaps.com/) and require a Stadia Maps account and token.
    6. -
    7. `"basic"`, `"streets"`, `"outdoors"`, `"light"`, `"dark"`, `"satellite"`, or `"satellite-streets"` yield maps composed of *vector* tiles from the Mapbox service, and *do* require a Mapbox Access Token or an on-premise Mapbox installation.
    8. -
    9. A Mapbox service style URL, which requires a Mapbox Access Token or an on-premise Mapbox installation.
    10. -
    11. A Mapbox Style object as defined at https://docs.mapbox.com/mapbox-gl-js/style-spec/
    12. -
    ---- diff --git a/_posts/plotly_js/maps/mapbox-layers/2019-08-16-how-layers-work.html b/_posts/plotly_js/maps/mapbox-layers/2019-08-16-how-layers-work.html index 4c533908b..50c3a3e3a 100644 --- a/_posts/plotly_js/maps/mapbox-layers/2019-08-16-how-layers-work.html +++ b/_posts/plotly_js/maps/mapbox-layers/2019-08-16-how-layers-work.html @@ -14,4 +14,16 @@
  • `layout.map.layers` is an array that defines more layers that are by default rendered above the traces in `data` (although this can also be controlled via the `below` attribute).
  • +
    Base maps in `layout.map.style`
    + + None of the built-in base maps require an account or an access token. The accepted values are: +
      +
    1. `"white-bg"` yields an empty white canvas, which makes no external HTTP requests
    2. +
    3. `"open-street-map"` yields raster tiles from [OpenStreetMap](https://www.openstreetmap.org)
    4. +
    5. `"basic"`, `"streets"`, `"outdoors"`, `"light"`, `"dark"`, `"satellite"`, and `"satellite-streets"` yield vector tiles from [Carto](https://github.com/cartodb/basemap-styles/) and [ArcGIS](https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer)
    6. +
    7. `"carto-positron"`, `"carto-darkmatter"`, `"carto-voyager"`, and their `-nolabels` variants yield the corresponding [Carto](https://github.com/cartodb/basemap-styles/) tiles
    8. +
    9. The URL of a [MapLibre style definition](https://maplibre.org/maplibre-style-spec/), for any other provider. Some providers require an API key, which you append to the style URL — Stamen tiles, for example, are served by [Stadia Maps](https://stadiamaps.com/) and need a Stadia account
    10. +
    11. A Map Style object, of the form described in the [MapLibre GL JS documentation](https://maplibre.org/maplibre-style-spec/)
    12. +
    + --- diff --git a/_posts/plotly_js/maps/mapbox-layers/2019-08-20-mapbox-layers_plotly_js_index.html b/_posts/plotly_js/maps/mapbox-layers/2019-08-20-mapbox-layers_plotly_js_index.html index 3e36160d2..32c4584f9 100644 --- a/_posts/plotly_js/maps/mapbox-layers/2019-08-20-mapbox-layers_plotly_js_index.html +++ b/_posts/plotly_js/maps/mapbox-layers/2019-08-20-mapbox-layers_plotly_js_index.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Tile Map Layers -order: 2 +order: 1 page_type: example_index permalink: javascript/tile-map-layers/ redirect_from: javascript/mapbox-layers/ diff --git a/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html b/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html index e26c2d6ca..30b42fe36 100644 --- a/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html +++ b/_posts/plotly_js/maps/maplibre-migration/2024-08-29-migrate-to-maplibre_plotly_js_index.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Migrate to Maplibre -order: 1 +order: 12 page_type: example_index permalink: javascript/maplibre-migration/ thumbnail: thumbnail/area.jpg diff --git a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-07-11-scatter_maps_plotly_js_index.html b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-07-11-scatter_maps_plotly_js_index.html index a15592334..4447dfa7c 100755 --- a/_posts/plotly_js/maps/scatter-plot-on-maps/2015-07-11-scatter_maps_plotly_js_index.html +++ b/_posts/plotly_js/maps/scatter-plot-on-maps/2015-07-11-scatter_maps_plotly_js_index.html @@ -5,7 +5,7 @@ language: plotly_js layout: base name: Scatter Plots on Maps -order: 7 +order: 6 permalink: javascript/scatter-plots-on-maps/ redirect_from: javascript-graphing-library/scatter-plots-on-maps/ thumbnail: thumbnail/scatter-plot-on-maps.jpg diff --git a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_basic-mapbox.html b/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_basic-mapbox.html deleted file mode 100644 index b8c3d7243..000000000 --- a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_basic-mapbox.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -name: Basic Example (Mapbox) -language: plotly_js -suite: scatter-tile-maps -order: 10 -sitemap: false -arrangement: horizontal -markdown_content: | - - > Mapbox traces are deprecated and may be removed in a future version of Plotly.js. - - Earlier examples use traces that render with [Maplibre GL JS](https://maplibre.org/maplibre-gl-js/docs/). - These traces were introduced in Plotly.js 2.35.0 and replace Mapbox-based tile maps, - which are now deprecated. Here's one of the earlier examples using the Mapbox-based `choroplethmapbox` trace ---- - -var data = [{ - type:'scattermapbox', - lat:['45.5017'], - lon:['-73.5673'], - mode:'markers', - marker: { - size:14 - }, - text:['Montreal'] -}] - -var layout = { - autosize: true, - hovermode:'closest', - mapbox: { - bearing:0, - center: { - lat:45, - lon:-73 - }, - pitch:0, - zoom:5 - }, -} - -Plotly.setPlotConfig({ - mapboxAccessToken: "your access token" -}) - -Plotly.newPlot('myDiv', data, layout) diff --git a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_plotly_js_index.html b/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_plotly_js_index.html index efef2c956..9df66d355 100755 --- a/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_plotly_js_index.html +++ b/_posts/plotly_js/maps/scattermapbox/2017-08-01-scattermapbox_plotly_js_index.html @@ -4,7 +4,7 @@ language: plotly_js layout: base name: Scatter Plots on Tile Maps -order: 8 +order: 7 permalink: javascript/scatter-tile-maps/ redirect_from: javascript/scattermapbox/ thumbnail: thumbnail/scatter-mapbox.jpg From 511e7b4760bf9d4508f17d7e8538c046f66cb876 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Wed, 5 Aug 2026 17:02:43 -0600 Subject: [PATCH 20/25] Update Sankey pages --- .../basic/sankey/2017-05-22-add_nodes.html | 50 ------------------- .../basic/sankey/2017-05-22-basic.html | 33 ------------ .../2017-05-22-sankey-from-dataset.html | 14 +++--- .../basic/sankey/2017-05-22-sankey_index.html | 2 +- .../basic/sankey/2017-05-22-style_sankey.html | 8 +-- .../sankey/2018-03-13-basic-example.html | 6 +-- .../sankey/2019-11-20-nodes-position.html | 2 +- .../sankey/2024-01-05-align-example.html | 10 ++-- .../sankey/2026-08-04-sankey-direction.html | 38 ++++++++++++++ .../basic/sankey/2026-08-04-sankey-sort.html | 40 +++++++++++++++ 10 files changed, 101 insertions(+), 102 deletions(-) delete mode 100644 _posts/plotly_js/basic/sankey/2017-05-22-add_nodes.html delete mode 100644 _posts/plotly_js/basic/sankey/2017-05-22-basic.html create mode 100644 _posts/plotly_js/basic/sankey/2026-08-04-sankey-direction.html create mode 100644 _posts/plotly_js/basic/sankey/2026-08-04-sankey-sort.html diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-add_nodes.html b/_posts/plotly_js/basic/sankey/2017-05-22-add_nodes.html deleted file mode 100644 index 2f88e09df..000000000 --- a/_posts/plotly_js/basic/sankey/2017-05-22-add_nodes.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: Add Nodes -language: plotly_js -suite: sankey -order: 3 -sitemap: false -arrangement: horizontal -description: ---- - -d3.json('https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json', function(fig){ - -var data = { - type: "sankey", - domain: { - x: [0,1], - y: [0,1] - }, - orientation: "h", - valueformat: ".0f", - valuesuffix: "TWh", - - node: { - pad: 15, - thickness: 15, - line: { - color: "black", - width: 0.5 - }, - label: fig.data[0].node.label, - color: fig.data[0].node.color - } -} - -var data = [data] - -var layout = { - title: { - text: "Energy forecast for 2050
    Source: Department of Energy & Climate Change, Tom Counsell via Mike Bostock" - }, - width: 1118, - height: 772, - font: { - size: 10 - } -} - -Plotly.newPlot('myDiv', data, layout) - -}); diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-basic.html b/_posts/plotly_js/basic/sankey/2017-05-22-basic.html deleted file mode 100644 index 25c79ff00..000000000 --- a/_posts/plotly_js/basic/sankey/2017-05-22-basic.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -name: Create Sankey Canvas -language: plotly_js -suite: sankey -order: 2 -sitemap: false -arrangement: horizontal -description: ---- - -var data = { - type: "sankey", - domain: { - x: [0,1], - y: [0,1] - }, - orientation: "h", - valueformat: ".0f", - valuesuffix: "TWh" -} - -var data = [data] - -var layout = { - title: { - text: "Energy forecast for 2050
    Source: Department of Energy & Climate Change, Tom Counsell via Mike Bostock" - }, - width: 1118, - height: 772, - font: { - size: 10 - } -} diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html b/_posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html index e602514e1..e6b106d3f 100644 --- a/_posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html +++ b/_posts/plotly_js/basic/sankey/2017-05-22-sankey-from-dataset.html @@ -1,16 +1,18 @@ --- -name: Add Links +name: Sankey Diagram from a Dataset language: plotly_js suite: sankey -order: 4 +order: 2 sitemap: false arrangement: horizontal -description: +markdown_content: | + A sankey trace is defined by its `link` arrays — `source` and `target` hold indices into `node.label`, and `value` + sets the width of each flow. Node positions and heights are derived from the links attached to them. --- d3.json('https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json', function(fig){ -var data = { +var trace = { type: "sankey", domain: { x: [0,1], @@ -38,13 +40,13 @@ } } -var data = [data] +var data = [trace] var layout = { title: { text: "Energy forecast for 2050
    Source: Department of Energy & Climate Change, Tom Counsell via Mike Bostock" }, - width: 1118, + width: 950, height: 772, font: { size: 10 diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-sankey_index.html b/_posts/plotly_js/basic/sankey/2017-05-22-sankey_index.html index b39b8a322..a453e30d3 100755 --- a/_posts/plotly_js/basic/sankey/2017-05-22-sankey_index.html +++ b/_posts/plotly_js/basic/sankey/2017-05-22-sankey_index.html @@ -10,4 +10,4 @@ --- {% assign examples = site.posts | where:"language","plotly_js" | where:"suite","sankey" | sort: "order" %} -{% include posts/auto_examples.html examples=examples %} \ No newline at end of file +{% include posts/auto_examples.html examples=examples %} diff --git a/_posts/plotly_js/basic/sankey/2017-05-22-style_sankey.html b/_posts/plotly_js/basic/sankey/2017-05-22-style_sankey.html index eaf7e3fd7..78a27b0e5 100644 --- a/_posts/plotly_js/basic/sankey/2017-05-22-style_sankey.html +++ b/_posts/plotly_js/basic/sankey/2017-05-22-style_sankey.html @@ -2,7 +2,7 @@ name: Style Sankey Diagram language: plotly_js suite: sankey -order: 5 +order: 3 sitemap: false arrangement: horizontal description: @@ -10,7 +10,7 @@ d3.json('https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy_dark.json', function(fig){ -var data = { +var trace = { type: "sankey", domain: { x: [0,1], @@ -37,13 +37,13 @@ } } -var data = [data] +var data = [trace] var layout = { title: { text: "Energy forecast for 2050
    Source: Department of Energy & Climate Change, Tom Counsell via Mike Bostock" }, - width: 1118, + width: 950, height: 772, font: { size: 10, diff --git a/_posts/plotly_js/basic/sankey/2018-03-13-basic-example.html b/_posts/plotly_js/basic/sankey/2018-03-13-basic-example.html index 85bce2638..bc4523f9a 100644 --- a/_posts/plotly_js/basic/sankey/2018-03-13-basic-example.html +++ b/_posts/plotly_js/basic/sankey/2018-03-13-basic-example.html @@ -8,7 +8,7 @@ description: --- -var data = { +var trace = { type: "sankey", orientation: "h", node: { @@ -29,7 +29,7 @@ } } -var data = [data] +var data = [trace] var layout = { title: { @@ -40,4 +40,4 @@ } } -Plotly.react('myDiv', data, layout) +Plotly.newPlot('myDiv', data, layout) diff --git a/_posts/plotly_js/basic/sankey/2019-11-20-nodes-position.html b/_posts/plotly_js/basic/sankey/2019-11-20-nodes-position.html index 15f4544f2..a273c079d 100644 --- a/_posts/plotly_js/basic/sankey/2019-11-20-nodes-position.html +++ b/_posts/plotly_js/basic/sankey/2019-11-20-nodes-position.html @@ -2,7 +2,7 @@ name: Define Node Position language: plotly_js suite: sankey -order: 6 +order: 4 sitemap: false arrangement: horizontal description: diff --git a/_posts/plotly_js/basic/sankey/2024-01-05-align-example.html b/_posts/plotly_js/basic/sankey/2024-01-05-align-example.html index 2dd8c887e..7434c9351 100644 --- a/_posts/plotly_js/basic/sankey/2024-01-05-align-example.html +++ b/_posts/plotly_js/basic/sankey/2024-01-05-align-example.html @@ -2,14 +2,16 @@ name: Node Alignment language: plotly_js suite: sankey -order: 7 +order: 5 sitemap: false arrangement: horizontal markdown_content : | - You can set the alignment of nodes using `node.align`. In this example, we align nodes to the "right". `node.align` can also be set to "left", "center", or "justify". The default is "justify" if ``node.align` is not set, and is similar to aligning to the "left", except that nodes without outgoing links are moved to the right of the figure. + You can set the alignment of nodes using `node.align`. In this example, we align nodes to the "right". `node.align` can also be set to "left", "center", or "justify". The default is "justify" if `node.align` is not set, and is similar to aligning to the "left", except that nodes without outgoing links are moved to the right of the figure. + + `node.align` only decides which column a node is placed in, for nodes whose position isn't already pinned by the links attached to them. It does not change which end of the diagram the sources sit on — for that, see [Flow Direction](#flow-direction). --- -var data = { +var trace = { type: "sankey", orientation: "h", node: { @@ -24,7 +26,7 @@ }, }; -var data = [data]; +var data = [trace]; var layout = { title: { diff --git a/_posts/plotly_js/basic/sankey/2026-08-04-sankey-direction.html b/_posts/plotly_js/basic/sankey/2026-08-04-sankey-direction.html new file mode 100644 index 000000000..b9df08917 --- /dev/null +++ b/_posts/plotly_js/basic/sankey/2026-08-04-sankey-direction.html @@ -0,0 +1,38 @@ +--- +name: Flow Direction +language: plotly_js +suite: sankey +order: 7 +sitemap: false +arrangement: horizontal +markdown_content: | + `direction` sets which way flows run along the `orientation` axis, so a diagram can be mirrored without reversing + your `link.source` and `link.target` data. The default, `'forward'`, puts sources first; `'reversed'` puts them last. + Combined with `orientation` (`'h'` or `'v'`) this gives four layouts: sources on the left, right, top, or bottom. + Node labels stay upright in every combination — only the flow geometry mirrors. + + `direction` mirrors the finished layout: it does not reassign nodes to different columns. To change which column a node is placed in, use [Node Alignment](#node-alignment). +--- +var data = [{ + type: 'sankey', + orientation: 'h', + direction: 'reversed', + node: { + label: ['Coal', 'Gas', 'Solar', 'Grid', 'Residential', 'Industrial'], + pad: 15, + thickness: 20 + }, + link: { + source: [0, 1, 2, 3, 3], + target: [3, 3, 3, 4, 5], + value: [8, 4, 3, 9, 6] + } +}]; + +var layout = { + title: {text: "Reversed Flow (sources on the right)"}, + width: 700, + height: 450 +}; + +Plotly.newPlot('myDiv', data, layout); diff --git a/_posts/plotly_js/basic/sankey/2026-08-04-sankey-sort.html b/_posts/plotly_js/basic/sankey/2026-08-04-sankey-sort.html new file mode 100644 index 000000000..57d9fb10a --- /dev/null +++ b/_posts/plotly_js/basic/sankey/2026-08-04-sankey-sort.html @@ -0,0 +1,40 @@ +--- +name: Node and Link Ordering +language: plotly_js +suite: sankey +order: 6 +sitemap: false +arrangement: horizontal +markdown_content: | + By default (`sort: 'auto'`) the layout reorders nodes within a column, and links within a node, to reduce crossings. + Set `node.sort` and `link.sort` to `'input'` to keep the order given in `node.label` and in + `link.source` / `link.target` instead. Use `'input'` when the order carries meaning, or when you need a + deterministic layout across renders — for animations or side-by-side comparisons. + + This figure pairs sources `A, B, C, D` one-to-one with targets `Z, Y, X, W`, a maximally crossed input. With + `'auto'`, the source column is flipped so the flows run horizontally; with `'input'`, every crossing is preserved. + `sort` is not honored on diagrams whose links form a cycle, which use a different layout algorithm. +--- +var data = [{ + type: 'sankey', + node: { + label: ['A', 'B', 'C', 'D', 'Z', 'Y', 'X', 'W'], + pad: 15, + thickness: 20, + sort: 'input' + }, + link: { + source: [0, 1, 2, 3], + target: [4, 5, 6, 7], + value: [4, 3, 2, 1], + sort: 'input' + } +}]; + +var layout = { + title: {text: "Input Order Preserved (sort: 'input')"}, + width: 700, + height: 450 +}; + +Plotly.newPlot('myDiv', data, layout); From 3a5f077e44db0dedaae173a3ea3002dfa2d28930 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Thu, 6 Aug 2026 09:05:03 -0600 Subject: [PATCH 21/25] Exclude deprecated languages from reference build, remove obsolete pages, add redirects --- _data/make_ref_pages.py | 8 ++++++- _includes/layouts/reference-side-nav.html | 22 ++++++++++++++++++- .../2020-07-20-choroplethmapbox.html | 16 +------------- .../javascript/2020-07-20-densitymapbox.html | 16 +------------- .../javascript/2020-07-20-map.html | 19 ++++++++++++++++ .../javascript/2020-07-20-mapbox.html | 17 +------------- .../javascript/2020-07-20-pointcloud.html | 18 --------------- ...-heatmapgl.html => 2020-07-20-quiver.html} | 8 +++---- .../javascript/2020-07-20-scattermapbox.html | 16 +------------- .../python/2020-07-20-choroplethmapbox.html | 16 +------------- .../python/2020-07-20-densitymapbox.html | 16 +------------- .../python/2020-07-20-map.html | 19 ++++++++++++++++ .../python/2020-07-20-mapbox.html | 17 +------------- .../python/2020-07-20-pointcloud.html | 18 --------------- ...-heatmapgl.html => 2020-07-20-quiver.html} | 8 +++---- .../python/2020-07-20-scattermapbox.html | 16 +------------- 16 files changed, 82 insertions(+), 168 deletions(-) create mode 100644 _posts/reference_pages/javascript/2020-07-20-map.html delete mode 100644 _posts/reference_pages/javascript/2020-07-20-pointcloud.html rename _posts/reference_pages/javascript/{2020-07-20-heatmapgl.html => 2020-07-20-quiver.html} (50%) create mode 100644 _posts/reference_pages/python/2020-07-20-map.html delete mode 100644 _posts/reference_pages/python/2020-07-20-pointcloud.html rename _posts/reference_pages/python/{2020-07-20-heatmapgl.html => 2020-07-20-quiver.html} (50%) diff --git a/_data/make_ref_pages.py b/_data/make_ref_pages.py index a76c18fb5..bbf92b3b4 100644 --- a/_data/make_ref_pages.py +++ b/_data/make_ref_pages.py @@ -3,7 +3,13 @@ schema = json.load(open("plotschema.json")) -for upperlang in ["Python", "JavaScript", "MATLAB", "R", "Julia", "F#"]: +# Only Python and JavaScript are regenerated. The MATLAB, R, Julia, and F# reference +# pages are frozen at whatever schema they were last built from: those languages are no +# longer maintained, and their pages load pinned older plotly.js bundles (R/ggplot2 on +# 1.58.4, Julia/MATLAB on 2.35.3 — see _includes/layouts/head.html), so regenerating them +# from a current schema would document attributes their bundles don't have and drop ones +# they do. Their existing files under _posts/reference_pages// are left untouched. +for upperlang in ["Python", "JavaScript"]: lang = upperlang.lower() lang = "fsharp" if lang == "f#" else lang lang = "csharp" if lang == "c#" else lang diff --git a/_includes/layouts/reference-side-nav.html b/_includes/layouts/reference-side-nav.html index 18018b187..efaf52640 100644 --- a/_includes/layouts/reference-side-nav.html +++ b/_includes/layouts/reference-side-nav.html @@ -1,3 +1,8 @@ +{% comment %}Python and JavaScript track the current plotly.js schema; the other +languages' reference pages are frozen on older bundles, so they keep the legacy +entries. See the note at the top of _data/make_ref_pages.py.{% endcomment %} +{% assign v4ref = false %} +{% if langue == "javascript" or langue == "python" %}{% assign v4ref = true %}{% endif %}
    Simple Traces
    @@ -295,7 +315,7 @@ Geo
  • - Mapbox + {% if v4ref %}Map{% else %}Mapbox{% endif %}
  • Polar diff --git a/_posts/reference_pages/javascript/2020-07-20-choroplethmapbox.html b/_posts/reference_pages/javascript/2020-07-20-choroplethmapbox.html index f6d7694e4..fa235a4f5 100644 --- a/_posts/reference_pages/javascript/2020-07-20-choroplethmapbox.html +++ b/_posts/reference_pages/javascript/2020-07-20-choroplethmapbox.html @@ -1,18 +1,4 @@ --- permalink: /javascript/reference/choroplethmapbox/ -layout: langindex -page_type: reference -language: plotly_js -name: choroplethmapbox Traces -description: Figure attribute reference for Plotly's JavaScript open-source graphing library. +redirect_to: /javascript/reference/choroplethmap/ --- - -

    JavaScript Figure Reference: choroplethmapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="choroplethmapbox" trace_data=site.data.plotschema.traces.choroplethmapbox %} - -
    -
    diff --git a/_posts/reference_pages/javascript/2020-07-20-densitymapbox.html b/_posts/reference_pages/javascript/2020-07-20-densitymapbox.html index 51e34b0c0..83c2a3490 100644 --- a/_posts/reference_pages/javascript/2020-07-20-densitymapbox.html +++ b/_posts/reference_pages/javascript/2020-07-20-densitymapbox.html @@ -1,18 +1,4 @@ --- permalink: /javascript/reference/densitymapbox/ -layout: langindex -page_type: reference -language: plotly_js -name: densitymapbox Traces -description: Figure attribute reference for Plotly's JavaScript open-source graphing library. +redirect_to: /javascript/reference/densitymap/ --- - -

    JavaScript Figure Reference: densitymapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="densitymapbox" trace_data=site.data.plotschema.traces.densitymapbox %} - -
    -
    diff --git a/_posts/reference_pages/javascript/2020-07-20-map.html b/_posts/reference_pages/javascript/2020-07-20-map.html new file mode 100644 index 000000000..ef85fac5b --- /dev/null +++ b/_posts/reference_pages/javascript/2020-07-20-map.html @@ -0,0 +1,19 @@ +--- +permalink: /javascript/reference/layout/map/ +layout: langindex +page_type: reference +language: plotly_js +name: layout.map +description: Figure attribute reference for Plotly's JavaScript open-source graphing library. +--- + +

    JavaScript Figure Reference: layout.map

    + +
    +
    + + {% assign attribute=site.data.plotschema.layout.layoutAttributes %} + {% include posts/reference-block.html parentlink="layout" block="layout" parentpath="layout" mustmatch="map" %} + +
    +
    diff --git a/_posts/reference_pages/javascript/2020-07-20-mapbox.html b/_posts/reference_pages/javascript/2020-07-20-mapbox.html index a79d682ba..34b7406c1 100644 --- a/_posts/reference_pages/javascript/2020-07-20-mapbox.html +++ b/_posts/reference_pages/javascript/2020-07-20-mapbox.html @@ -1,19 +1,4 @@ --- permalink: /javascript/reference/layout/mapbox/ -layout: langindex -page_type: reference -language: plotly_js -name: layout.mapbox -description: Figure attribute reference for Plotly's JavaScript open-source graphing library. +redirect_to: /javascript/reference/layout/map/ --- - -

    JavaScript Figure Reference: layout.mapbox

    - -
    -
    - - {% assign attribute=site.data.plotschema.layout.layoutAttributes %} - {% include posts/reference-block.html parentlink="layout" block="layout" parentpath="layout" mustmatch="mapbox" %} - -
    -
    diff --git a/_posts/reference_pages/javascript/2020-07-20-pointcloud.html b/_posts/reference_pages/javascript/2020-07-20-pointcloud.html deleted file mode 100644 index 7cfdfdf9c..000000000 --- a/_posts/reference_pages/javascript/2020-07-20-pointcloud.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -permalink: /javascript/reference/pointcloud/ -layout: langindex -page_type: reference -language: plotly_js -name: pointcloud Traces -description: Figure attribute reference for Plotly's JavaScript open-source graphing library. ---- - -

    JavaScript Figure Reference: pointcloud Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="pointcloud" trace_data=site.data.plotschema.traces.pointcloud %} - -
    -
    diff --git a/_posts/reference_pages/javascript/2020-07-20-heatmapgl.html b/_posts/reference_pages/javascript/2020-07-20-quiver.html similarity index 50% rename from _posts/reference_pages/javascript/2020-07-20-heatmapgl.html rename to _posts/reference_pages/javascript/2020-07-20-quiver.html index f6971851a..9a9a273fe 100644 --- a/_posts/reference_pages/javascript/2020-07-20-heatmapgl.html +++ b/_posts/reference_pages/javascript/2020-07-20-quiver.html @@ -1,18 +1,18 @@ --- -permalink: /javascript/reference/heatmapgl/ +permalink: /javascript/reference/quiver/ layout: langindex page_type: reference language: plotly_js -name: heatmapgl Traces +name: quiver Traces description: Figure attribute reference for Plotly's JavaScript open-source graphing library. --- -

    JavaScript Figure Reference: heatmapgl Traces

    +

    JavaScript Figure Reference: quiver Traces

    - {% include posts/reference-trace.html trace_name="heatmapgl" trace_data=site.data.plotschema.traces.heatmapgl %} + {% include posts/reference-trace.html trace_name="quiver" trace_data=site.data.plotschema.traces.quiver %}
    diff --git a/_posts/reference_pages/javascript/2020-07-20-scattermapbox.html b/_posts/reference_pages/javascript/2020-07-20-scattermapbox.html index e1678d9b4..4692e29c8 100644 --- a/_posts/reference_pages/javascript/2020-07-20-scattermapbox.html +++ b/_posts/reference_pages/javascript/2020-07-20-scattermapbox.html @@ -1,18 +1,4 @@ --- permalink: /javascript/reference/scattermapbox/ -layout: langindex -page_type: reference -language: plotly_js -name: scattermapbox Traces -description: Figure attribute reference for Plotly's JavaScript open-source graphing library. +redirect_to: /javascript/reference/scattermap/ --- - -

    JavaScript Figure Reference: scattermapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="scattermapbox" trace_data=site.data.plotschema.traces.scattermapbox %} - -
    -
    diff --git a/_posts/reference_pages/python/2020-07-20-choroplethmapbox.html b/_posts/reference_pages/python/2020-07-20-choroplethmapbox.html index f8635576d..719cacb78 100644 --- a/_posts/reference_pages/python/2020-07-20-choroplethmapbox.html +++ b/_posts/reference_pages/python/2020-07-20-choroplethmapbox.html @@ -1,18 +1,4 @@ --- permalink: /python/reference/choroplethmapbox/ -layout: langindex -page_type: reference -language: python -name: choroplethmapbox Traces -description: Figure attribute reference for Plotly's Python open-source graphing library. +redirect_to: /python/reference/choroplethmap/ --- - -

    Python Figure Reference: choroplethmapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="choroplethmapbox" trace_data=site.data.plotschema.traces.choroplethmapbox %} - -
    -
    diff --git a/_posts/reference_pages/python/2020-07-20-densitymapbox.html b/_posts/reference_pages/python/2020-07-20-densitymapbox.html index e29c6ee67..9f485185d 100644 --- a/_posts/reference_pages/python/2020-07-20-densitymapbox.html +++ b/_posts/reference_pages/python/2020-07-20-densitymapbox.html @@ -1,18 +1,4 @@ --- permalink: /python/reference/densitymapbox/ -layout: langindex -page_type: reference -language: python -name: densitymapbox Traces -description: Figure attribute reference for Plotly's Python open-source graphing library. +redirect_to: /python/reference/densitymap/ --- - -

    Python Figure Reference: densitymapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="densitymapbox" trace_data=site.data.plotschema.traces.densitymapbox %} - -
    -
    diff --git a/_posts/reference_pages/python/2020-07-20-map.html b/_posts/reference_pages/python/2020-07-20-map.html new file mode 100644 index 000000000..08f54c7e9 --- /dev/null +++ b/_posts/reference_pages/python/2020-07-20-map.html @@ -0,0 +1,19 @@ +--- +permalink: /python/reference/layout/map/ +layout: langindex +page_type: reference +language: python +name: layout.map +description: Figure attribute reference for Plotly's Python open-source graphing library. +--- + +

    Python Figure Reference: layout.map

    + +
    +
    + + {% assign attribute=site.data.plotschema.layout.layoutAttributes %} + {% include posts/reference-block.html parentlink="layout" block="layout" parentpath="layout" mustmatch="map" %} + +
    +
    diff --git a/_posts/reference_pages/python/2020-07-20-mapbox.html b/_posts/reference_pages/python/2020-07-20-mapbox.html index 7a033625b..140e8ee80 100644 --- a/_posts/reference_pages/python/2020-07-20-mapbox.html +++ b/_posts/reference_pages/python/2020-07-20-mapbox.html @@ -1,19 +1,4 @@ --- permalink: /python/reference/layout/mapbox/ -layout: langindex -page_type: reference -language: python -name: layout.mapbox -description: Figure attribute reference for Plotly's Python open-source graphing library. +redirect_to: /python/reference/layout/map/ --- - -

    Python Figure Reference: layout.mapbox

    - -
    -
    - - {% assign attribute=site.data.plotschema.layout.layoutAttributes %} - {% include posts/reference-block.html parentlink="layout" block="layout" parentpath="layout" mustmatch="mapbox" %} - -
    -
    diff --git a/_posts/reference_pages/python/2020-07-20-pointcloud.html b/_posts/reference_pages/python/2020-07-20-pointcloud.html deleted file mode 100644 index 4df8513d4..000000000 --- a/_posts/reference_pages/python/2020-07-20-pointcloud.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -permalink: /python/reference/pointcloud/ -layout: langindex -page_type: reference -language: python -name: pointcloud Traces -description: Figure attribute reference for Plotly's Python open-source graphing library. ---- - -

    Python Figure Reference: pointcloud Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="pointcloud" trace_data=site.data.plotschema.traces.pointcloud %} - -
    -
    diff --git a/_posts/reference_pages/python/2020-07-20-heatmapgl.html b/_posts/reference_pages/python/2020-07-20-quiver.html similarity index 50% rename from _posts/reference_pages/python/2020-07-20-heatmapgl.html rename to _posts/reference_pages/python/2020-07-20-quiver.html index 3a19bc8c7..a2fb60e22 100644 --- a/_posts/reference_pages/python/2020-07-20-heatmapgl.html +++ b/_posts/reference_pages/python/2020-07-20-quiver.html @@ -1,18 +1,18 @@ --- -permalink: /python/reference/heatmapgl/ +permalink: /python/reference/quiver/ layout: langindex page_type: reference language: python -name: heatmapgl Traces +name: quiver Traces description: Figure attribute reference for Plotly's Python open-source graphing library. --- -

    Python Figure Reference: heatmapgl Traces

    +

    Python Figure Reference: quiver Traces

    - {% include posts/reference-trace.html trace_name="heatmapgl" trace_data=site.data.plotschema.traces.heatmapgl %} + {% include posts/reference-trace.html trace_name="quiver" trace_data=site.data.plotschema.traces.quiver %}
    diff --git a/_posts/reference_pages/python/2020-07-20-scattermapbox.html b/_posts/reference_pages/python/2020-07-20-scattermapbox.html index 36d389ee1..58ba4b17f 100644 --- a/_posts/reference_pages/python/2020-07-20-scattermapbox.html +++ b/_posts/reference_pages/python/2020-07-20-scattermapbox.html @@ -1,18 +1,4 @@ --- permalink: /python/reference/scattermapbox/ -layout: langindex -page_type: reference -language: python -name: scattermapbox Traces -description: Figure attribute reference for Plotly's Python open-source graphing library. +redirect_to: /python/reference/scattermap/ --- - -

    Python Figure Reference: scattermapbox Traces

    - -
    -
    - - {% include posts/reference-trace.html trace_name="scattermapbox" trace_data=site.data.plotschema.traces.scattermapbox %} - -
    -
    From 070be5cb47f55b245985ba54cf1900dacf5996de Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Thu, 6 Aug 2026 09:23:59 -0600 Subject: [PATCH 22/25] Update guide thumbnails --- _posts/plotly_js/guides/typescript/2026-08-04-typescript.md | 2 +- .../guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md b/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md index 937926d0b..57db0a4b1 100644 --- a/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md +++ b/_posts/plotly_js/guides/typescript/2026-08-04-typescript.md @@ -8,7 +8,7 @@ order: 4 page_type: u-guide permalink: javascript/guides/typescript/ sitemap: false -thumbnail: thumbnail/mixed.jpg +thumbnail: thumbnail/theming-and-templates.png --- # Using Plotly.js with TypeScript diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index 2f7a9292a..f86fff7d3 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -8,7 +8,7 @@ order: 1 page_type: u-guide permalink: javascript/guides/whats-new-in-v4/ sitemap: false -thumbnail: thumbnail/mixed.jpg +thumbnail: thumbnail/quiver-plot.jpg --- # What's New in Plotly.js v4 From b658a85a21956ed38cd9c7ba5c134728a8f98729 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Thu, 6 Aug 2026 10:50:20 -0600 Subject: [PATCH 23/25] Update share chart images --- .../share_with_plotly_cloud_button.png | Bin 21323 -> 18089 bytes .../share_with_plotly_cloud_dialog.png | Bin 22903 -> 30254 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png b/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png index 4dae7fc02bcd543e80a2f09fd1a05b22b621727c..eeca3a4f832b768464f62acebdcfb7a0644866f8 100644 GIT binary patch literal 18089 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 diff --git a/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png b/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png index 192482fe452512c3f42c50db327f416a95e28d70..7de949cd610a39fdcd7c5030d65e8180825f7b3c 100644 GIT binary patch literal 30254 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 jy-vB$Nd7D!&AYB7PNe)8} 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

    {n91mn)813ZR>lj?0=@xVq`#kUuF`F!#%L zysoRVSEVRvds$_*j3@8ntB-_J5sv=jw!oXW9=|PINSU8HS2dTx4f;}%vBg-XFK zhGbhpe#azXra@kTsERMjw{5s!#E6ztlg0_GA?cqBBD;5cbv3nXL4`#PJY}z0Q+<*6 zGJf{hBci%%pMLpv2^qFJ2@eI(;zCQ|;;5-dWp%d^Dr+B~+HI}wA4Zu>2AwY#@+Iff z;G1CEJ3$)i=(_7V()FrgsBb}Y?{m@?{Zg#KDNMmQ2j*_$;94Vps8R_jE{ z`@VrX2@JRIg+o*$d5|D$+Q>6%m6tu#_V z_Mu55)y7_js9d&$$Ot}sGZQ?|uLhnMS$kg4+%_y9fco4MTtCL?ZJs-Z_KuKgEcl|y zkaDb1qzmDM$P6eUF?H#1#pboHyj6d?r3Wf;maF!aZ23j8VFx*k-cWo?cK;!C#7Lub zA51x@Sx(F=I!|)zbPcp^NV_Ax&412O1Cf`vu%TBo#ycxRo+fV=A|&r@YuH>Ii5iRJ z)+2E^J$|b8TH9yz%pQS_Wy9r|z0ciqeyqgKIf}*|w6M>$u~jDx8uX*CB`+D8xc_=K z^f|TKf7-t5jc?w)`}cE4ia{jVW|PGJ@5SGVM^ax;KA6z)LoE;PK9nYhJzH|LGW73N zUsa!@<{8JrE{)15SmnlH=n1Akh-DvSPr&p7jSt`UPmLhmtq5t}dA@i&?%?=AYb8YH z9O(6c%|DTBFgJsuPdj~)XZGyWxcty(vb$Yr_2u=RcXP9y%+0xv3q~;6#+zd6r|HVY zCc}jb;RyY|7bOcus(V|&fZUiM&SWW?i_>)#+u!ANv}D4-MR{;wGCh8P9sB<5Hm2}D z3dJ&_A3lr&s&mFb;~?`&%QM`rWsu_7XhdHvNYIRr#Nb^Nhh8V({5{7+l*`}!5~7F_ zGnguHDEH39d`z+ep)uFvunopr{GJNOv$4q~37YJ}jCgk|h|QJ3nH(K>KcT|}u=NSc ztdk0wZXHEc$1Ztm%q9e_EW^sBBpl;I>qPiXiZ6A&bY|>MzEETK?}Or4!yo@G|1>Ge zdT+>Bt1k#E%ajL9mT=t?8Wn`5=!5OS(xqPisNc3#$hQZIgg|s*nHB(fL7T)C&(U$m zhhExvfB*CwEkzlRF~+wl%JtXg7!(chL-UevVDOWq&IvAR1BqW(_njnS{lJI%7nmyUrQo+e2DZk1jN0_*^-B5-tuvkSus!=6_-7iX%r26tREZ*pTe!GU84RD-PlwG z+~pU_2w*Zgye-2S(R@ZxQn8RyN0gKRQu5IS~;0Iob&4@v7IfB>q*{&Q)JzjCdVKp@(- zI>hc}cscYMeGU$x>-AF%Upg;L(I?b7$0L*e--?6y; zAj+PySSBH^V0jFpngNrrz_9NHF?In9E{gBRywUOFIq*N2D&J?1Hp0cf9P}MC22^te zg)hVm2xFp|+E-hT0aaG{5O}DH1SZs@w@fC_IzIu#SB*iuD5yvqILEhmYNu}jlC@c5g7Wxs%FOAQOLaOs`f6(>s;A36zusx&@tN-L zTSST($%lYAelUHik1`B8FU}?P<_R!AhI>+E3V~NCC@2_P5631O)tEforK#9`#T&yj zW0P%1(Nemo&l|iVdE-;2$qx8r=!gXuc9_W#E}F%1Cbcym!>?*Gf}`LDWd1lP=RNb_ zJda6lhfxrp4Yyw)-Y$dfMc8J!3{s{n{3#$G^& mtp3;h|34SUf7qXlRau{*(_YUV&jCSY9@KHOW8|Y3@B9z&qVw_q From 55378a7767660419f8dfba252cf302f2ee55c42d Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Thu, 6 Aug 2026 11:04:04 -0600 Subject: [PATCH 24/25] Update language to match current version --- .../2015-09-24-config-showSendToCloud.html | 14 ++++++++------ .../2016-05-20-static-image.md | 2 +- .../2018-12-17-how-to-tick-format-layout.html | 4 ---- .../2026-07-17-migrating-to-v4.md | 2 +- .../2026-07-20-whats-new-in-v4.md | 16 ++++++++++------ 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html index 3373b7748..9b7df5f52 100644 --- a/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html +++ b/_posts/plotly_js/fundamentals/config-options/2015-09-24-config-showSendToCloud.html @@ -1,16 +1,18 @@ --- -name: Share with Plotly Cloud +name: Share a Chart to Plotly Cloud language: plotly_js suite: configuration order: 6 sitemap: false arrangement: horizontal markdown_content: | - The `sendChartToCloud` modebar button sends the chart to [Plotly Cloud](https://cloud.plotly.com) and opens it in a - new tab, where you can copy a sharing link and set the chart's visibility. A Plotly Cloud account is required. + The `sendChartToCloud` modebar button, labelled "Share chart…", sends the chart to + [Plotly Cloud](https://cloud.plotly.com) and opens it in a new tab, where you can copy a sharing link and set the + chart's visibility. Clicking it first brings up a confirmation dialog naming the destination. A Plotly Cloud account + is required. The button is shown by default. Set `showSendToCloud: false` to hide it, or set `plotlyServerURL` to send charts to - a self-hosted or alternate server instead of `cloud.plotly.com`. + a self-hosted or alternate server instead of the default `https://cloud.plotly.com/newchart`. --- var data = [{ values: [19, 26, 55], @@ -20,13 +22,13 @@ var layout = { title: { - text: 'Share with Plotly Cloud' + text: 'Share a Chart to Plotly Cloud' } }; var config = { showSendToCloud: true, - plotlyServerURL: "https://cloud.plotly.com" + plotlyServerURL: "https://cloud.plotly.com/newchart" }; Plotly.newPlot('myDiv', data, layout, config); diff --git a/_posts/plotly_js/fundamentals/static-image-export/2016-05-20-static-image.md b/_posts/plotly_js/fundamentals/static-image-export/2016-05-20-static-image.md index cf77e1f0d..2b61807a7 100644 --- a/_posts/plotly_js/fundamentals/static-image-export/2016-05-20-static-image.md +++ b/_posts/plotly_js/fundamentals/static-image-export/2016-05-20-static-image.md @@ -60,7 +60,7 @@ You can also save the image using different formats. The common image formats: 'PNG', 'JPG/JPEG' are supported. In addition, formats like 'EPS', 'SVG' and 'PDF' are also available for user with a Personal or Professional subscription. You can get more details on our [pricing page] (https://plotly.com/products/cloud/) -**Note:** It is important to note that any figures containing WebGL traces (i.e. of type scattergl, heatmapgl, contourgl, scatter3d, surface, mesh3d, scatterpolargl, cone, streamtube, splom, or parcoords) that are exported in a vector format like SVG, EPS or PDF will include encapsulated rasters instead of vectors for some parts of the image. +**Note:** It is important to note that any figures containing WebGL traces (i.e. of type scattergl, scatter3d, surface, mesh3d, scatterpolargl, cone, streamtube, splom, or parcoords) that are exported in a vector format like SVG, EPS or PDF will include encapsulated rasters instead of vectors for some parts of the image. ## Saving as PNG ## img_png.attr("src", url); diff --git a/_posts/plotly_js/fundamentals/tick-format/2018-12-17-how-to-tick-format-layout.html b/_posts/plotly_js/fundamentals/tick-format/2018-12-17-how-to-tick-format-layout.html index 4c4254926..bb06f3779 100644 --- a/_posts/plotly_js/fundamentals/tick-format/2018-12-17-how-to-tick-format-layout.html +++ b/_posts/plotly_js/fundamentals/tick-format/2018-12-17-how-to-tick-format-layout.html @@ -27,10 +27,6 @@ tickvals: [ /* */ ], /* Set the text displayed at the ticks position via tickvals */ ticktext: [ /* */ ], - /* Set the source reference for tickvals */ - tickvalssrc: '', - /* Set the source reference for ticktext */ - tickvtextsrc: '', /* Set the tick label formatting rule using d3 formatting mini-languages */ tickformat: '', diff --git a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md index 22f76179e..b11cd824f 100644 --- a/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md +++ b/_posts/plotly_js/guides/migrating-to-v4/2026-07-17-migrating-to-v4.md @@ -101,7 +101,7 @@ Plotly.newPlot(gd, data, layout, { }); ``` -The **"Share with Plotly Cloud" button (`sendChartToCloud`) is now on by +The **"Share chart…" button (`sendChartToCloud`) is now on by default**. If you don't want the button visible, it can be turned off as follows: ```js diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index f86fff7d3..220186c31 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -137,15 +137,19 @@ A larger example showing arrows colored by magnitude: [#7854](https://github.com/plotly/plotly.js/pull/7854), and [#7909](https://github.com/plotly/plotly.js/pull/7909).* -Plotly.js now offers a modebar button which sends the current chart to [Plotly Cloud](https://cloud.plotly.com) to generate a shareable link. Sharing the chart opens Plotly Cloud in a new tab, where you can copy the sharing link and adjust visibility settings. A Plotly Cloud account is required. +Plotly.js now offers a modebar button, labelled "Share chart…", which sends the +current chart to [Plotly Cloud](https://cloud.plotly.com) to generate a shareable +link. Sharing the chart opens Plotly Cloud in a new tab, where you can copy the +sharing link and adjust visibility settings. A Plotly Cloud account is required. The button is enabled by default in v4: -![Share with Plotly Cloud button](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png) +![The "Share chart…" modebar button](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png) -Clicking the button brings up the share dialog: +Clicking the button brings up a confirmation dialog, which names the destination +and offers **Cancel** and **Share**: -![Share with Plotly Cloud dialog](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png) +![The "Share chart" confirmation dialog](/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png) ### Config @@ -153,8 +157,8 @@ The button is controlled by two config options: | Config option | Default | Purpose | |---|---|---| -| `showSendToCloud` | `true` | Whether the "Share with Plotly Cloud" modebar button is rendered. | -| `plotlyServerURL` | `'cloud.plotly.com'` | The endpoint the button posts to. Override to point at a self-hosted or alternate server. | +| `showSendToCloud` | `true` | Whether the "Share chart…" modebar button is rendered. | +| `plotlyServerURL` | `'https://cloud.plotly.com/newchart'` | The endpoint the button posts to. Override to point at a self-hosted or alternate server. | Hide the button by setting `showSendToCloud: false`: From 9ea07144ac677eae6eca7ea89c9cc0a344220897 Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Thu, 6 Aug 2026 12:51:46 -0600 Subject: [PATCH 25/25] Add antimeridian crossing example image --- .../2026-07-20-whats-new-in-v4.md | 2 ++ .../images/whats-new-in-v4/map_fitbounds.png | Bin 0 -> 91599 bytes 2 files changed, 2 insertions(+) create mode 100644 all_static/images/whats-new-in-v4/map_fitbounds.png diff --git a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md index 220186c31..cfbc916d4 100644 --- a/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md +++ b/_posts/plotly_js/guides/whats-new-in-v4/2026-07-20-whats-new-in-v4.md @@ -485,6 +485,8 @@ range rather than the long-way-around view. For example, `lon: [131.8855, -179]` frames as `[131.8855, 181]` (a ~49° span across the antimeridian) instead of the naive `[-179, 131.8855]` (~311° the wrong way). +![naive vs compact auto-fit](/all_static/images/whats-new-in-v4/map_fitbounds.png) + ### `map.bounds` is unaffected The `map.bounds` layout attribute (which restricts panning) is a separate diff --git a/all_static/images/whats-new-in-v4/map_fitbounds.png b/all_static/images/whats-new-in-v4/map_fitbounds.png new file mode 100644 index 0000000000000000000000000000000000000000..33100af002e18eceb062c9a5716d69aaceaaeba1 GIT binary patch literal 91599 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

  • Åland IslandsALA
    AlbaniaALB
    AlgeriaDZA
    American SamoaASM
    AndorraAND
    American SamoaASM
    AndorraAND
    AngolaAGO
    AnguillaAIA
    AnguillaAIA
    AntarcticaATA
    Antigua and BarbudaATG
    Antigua and BarbudaATG
    ArgentinaARG
    ArmeniaARM
    ArubaABW
    ArubaABW
    Arunachal PradeshXAP
    AustraliaAUS
    AustriaAUT
    AzerbaijanAZE
    Azores IslandsPRT
    Azores Islands (grouped with Portugal)PRT
    BahamasBHS
    BahrainBHR
    BahrainBHR
    BangladeshBGD
    BarbadosBRB
    BarbadosBRB
    BelarusBLR
    BelgiumBEL
    BelizeBLZ
    BeninBEN
    BermudaBMU
    BermudaBMU
    BhutanBTN
    Bir TawilXBT
    Bolivia (Plurinational State of)BOL
    BonaireBES
    BonaireBES
    Bosnia and HerzegovinaBIH
    BotswanaBWA
    Bouvet IslandBVT
    Bouvet IslandBVT
    BrazilBRA
    British Virgin IslandsVGB
    British Virgin IslandsVGB
    Brunei DarussalamBRN
    BulgariaBGR
    Burkina FasoBFA
    CambodiaKHM
    CameroonCMR
    CanadaCAN
    Canary IslandsESP
    Cayman IslandsCYM
    Canary Islands (grouped with Spain)ESP
    Cayman IslandsCYM
    Central African RepublicCAF
    ChadTCD
    Chagos ArchipelagoMUS
    Chagos Archipelago (grouped with Mauritius)MUS
    ChileCHL
    ChinaCHN
    Christmas IslandCXR
    Cocos (Keeling) IslandsCCK
    Christmas IslandCXR
    Cocos (Keeling) IslandsCCK
    ColombiaCOL
    ComorosCOM
    CongoCOG
    Cook IslandsCOK
    Cook IslandsCOK
    Costa RicaCRI
    Côte d'IvoireCIV
    CroatiaHRV
    CubaCUB
    CuraçaoCUW
    CuraçaoCUW
    CyprusCYP
    CzechiaCZE
    Democratic People's Republic of KoreaPRK
    EswatiniSWZ
    EthiopiaETH
    Falkland Islands (Malvinas)FLK
    Faroe IslandsFRO
    Faroe IslandsFRO
    FijiFJI
    FinlandFIN
    FranceFRA
    French PolynesiaPYF
    French Southern TerritoriesATF
    GabonGAB
    Galápagos IslandsECU
    Galápagos Islands (grouped with Ecuador)ECU
    GambiaGMB
    GazaPSE
    Gaza (grouped with State of Palestine)PSE
    GeorgiaGEO
    GermanyDEU
    GhanaGHA
    GibraltarGIB
    GibraltarGIB
    GreeceGRC
    GreenlandGRL
    GrenadaGRD
    GrenadaGRD
    GuadeloupeGLP
    GuamGUM
    GuatemalaGTM
    GuernseyGGY
    GuernseyGGY
    GuineaGIN
    Guinea-BissauGNB
    GuyanaGUY
    HaitiHTI
    Halaib TriangleXHT
    Heard Island and McDonald IslandsHMD
    Heard Island and McDonald IslandsHMD
    HondurasHND
    Hong KongHKG
    Hong KongHKG
    HungaryHUN
    IcelandISL
    Ilemi TriangleXIT
    Iran (Islamic Republic of)IRN
    IraqIRQ
    IrelandIRL
    Isle of ManIMN
    Isle of ManIMN
    IsraelISR
    ItalyITA
    JamaicaJAM
    Jammu and KashmirXJK
    JapanJPN
    JerseyJEY
    JerseyJEY
    JordanJOR
    KazakhstanKAZ
    KenyaKEN
    Kingdom of the NetherlandsNLD
    KiribatiKIR
    KiribatiKIR
    KuwaitKWT
    KyrgyzstanKGZ
    Lao People's Democratic RepublicLAO
    LesothoLSO
    LiberiaLBR
    LibyaLBY
    LiechtensteinLIE
    LiechtensteinLIE
    LithuaniaLTU
    LuxembourgLUX
    MacaoMAC
    MacaoMAC
    MadagascarMDG
    Madeira IslandPRT
    Madeira Island (grouped with Portugal)PRT
    MalawiMWI
    MalaysiaMYS
    MaldivesMDV
    MaldivesMDV
    MaliMLI
    MaltaMLT
    Marshall IslandsMHL
    MaltaMLT
    Marshall IslandsMHL
    MartiniqueMTQ
    MauritaniaMRT
    MauritiusMUS
    MayotteMYT
    MayotteMYT
    MexicoMEX
    Micronesia (Federated States of)FSM
    MonacoMCO
    Micronesia (Federated States of)FSM
    MonacoMCO
    MongoliaMNG
    MontenegroMNE
    MontserratMSR
    MontserratMSR
    MoroccoMAR
    MozambiqueMOZ
    MyanmarMMR
    NamibiaNAM
    NauruNRU
    NauruNRU
    NepalNPL
    New CaledoniaNCL
    New ZealandNZL
    NicaraguaNIC
    NigerNER
    NigeriaNGA
    NiueNIU
    Norfolk IslandNFK
    NiueNIU
    Norfolk IslandNFK
    North MacedoniaMKD
    Northern Mariana IslandsMNP
    Northern Mariana IslandsMNP
    NorwayNOR
    OmanOMN
    PakistanPAK
    PalauPLW
    PalauPLW
    PanamaPAN
    Papua New GuineaPNG
    ParaguayPRY
    PeruPER
    PhilippinesPHL
    PitcairnPCN
    PitcairnPCN
    PolandPOL
    PortugalPRT
    Puerto RicoPRI
    RomaniaROU
    Russian FederationRUS
    RwandaRWA
    SabaBES
    Saint BarthélemyBLM
    Saint HelenaSHN
    Saint Kitts and NevisKNA
    Saint LuciaLCA
    Saint MartinMAF
    Saint Pierre and MiquelonSPM
    Saint Vincent and the GrenadinesVCT
    SabaBES
    Saint BarthélemyBLM
    Saint HelenaSHN
    Saint Kitts and NevisKNA
    Saint LuciaLCA
    Saint MartinMAF
    Saint Pierre and MiquelonSPM
    Saint Vincent and the GrenadinesVCT
    SamoaWSM
    Sao Tome and PrincipeSTP
    Saudi ArabiaSAU
    SenegalSEN
    SerbiaSRB
    SeychellesSYC
    SeychellesSYC
    Sierra LeoneSLE
    SingaporeSGP
    Sint EustatiusBES
    Sint MaartenSXM
    SingaporeSGP
    Sint EustatiusBES
    Sint MaartenSXM
    SlovakiaSVK
    SloveniaSVN
    Solomon IslandsSLB
    ThailandTHA
    Timor-LesteTLS
    TogoTGO
    TokelauTKL
    TongaTON
    TokelauTKL
    TongaTON
    Trinidad and TobagoTTO
    TunisiaTUN
    TürkiyeTUR
    TurkmenistanTKM
    Turks and Caicos IslandsTCA
    TuvaluTUV
    Turks and Caicos IslandsTCA
    TuvaluTUV
    UgandaUGA
    UkraineUKR
    United Arab EmiratesARE
    United Kingdom of Great Britain and Northern IrelandGBR
    United Republic of TanzaniaTZA
    United States of AmericaUSA
    United States Virgin IslandsVIR
    United States Virgin IslandsVIR
    UruguayURY
    UzbekistanUZB
    VanuatuVUT
    Venezuela (Bolivarian Republic of)VEN
    Viet NamVNM
    West BankPSE
    West Bank (grouped with State of Palestine)PSE
    Western SaharaESH
    YemenYEM
    ZambiaZMB

    SzA z{Rvqg?MW}1*oW8Li3Pujo{IY9;;oP?;P7&h^DlKUo9hCA&VX zed6bMsHKl7NxPO=DL%JSH}@BNc~)Zq;#%k6R>U)u*b7zN8TdjtryFQqZP|2| zN~^B(?S)4T&X;JDH?esBH4}oDeFnMj%{)ffBdEgHi{AWLVn6zfrG_R7mLE}k+S^ZM zb_HY^TpFiP(|@fT`$zRNIt z99p*JHnM*&ibOqGDzgP*&@q+M6(nqI1lY0_7hw^Cd_}Tw--wS<>I0f`A>&EsP6`LM-!!;uY7k>q1?ysFl|tZ{CdKwBGqdwn4;bn5y~FP0D(y?7q&^ znEzMh?OWVrnU)vq+u!7@mv__4%pKOuoz6~Qdv)8np-pXJqr%(9_A3h3fhQnc`NUh` zjYsk$d*hG(^-{pG^Um*N*Vhf^Z8Qn+Sv#bmm1S4xB`k?D{jSfmpLIk6h%4v+GrY6= zMHo$?gR*;vxqZvTfHm~nAGwJD2iteVg;V?9{qYGEhx>u;jQ4x6+|Ub%Kt`&^W;AEB z$1viE2jq1uQwm;Vg>*471%F9=)L?kMO4Y`?>%rQS6Y&!6-nyz<`fCmZ(RdQ{8m>2M zPZ&KlM;V5owitI8p%vfn*4#G1xQNLYg{y6*!xs&vRGEz+CVXJUGpH4wAIqmS4( z@BGm=S^qa)^za+eo8ORFO}M-{Gpbx2w$&`N4e0^VCvc-`VE*Hp;wI^@@s0MOCQzKhBJSW=^Ck{#ra)H?{cCdwMnu@%%uxj zxqxs!-+&$4daeknMTLDBbJhgS?jj+#pASx!1|4W94_LGC|6KZ(pF)Wd;*Gmt`9h=# z2c1^YeA-zTIzK2pHYZMtbz`vxfj-|k zIz7_F$IMZFPTx?k?Kg)OmWopF>{r4^l8LhqDVj=+Y%%*eY=!H`rJ20VP(+rdY51+_ zF+VZ-YDg4?uQ_z!s7_8Zw`%+z+DRfGeJg?H3)|<`F*xXXfTDsp*Ca=)hz{=Y9-D5% zAZwM>EKR*CW(|gkx+uCE#+q)pEDFqeqk*gPH!4_X0Y*K7Q0Dj7o2$k8Kw^zK9cI5B=$y3>Xu1vhiP?wA z6@V9U;Cbk+|H}n;P?!B)<_=Fc{g>+I=tpBAa)5sH#&%SJlq`Sey`MwdICvI5&qIM% zYrepm-|{TQ8u2(WH89EOPH2!Ix)G=Rg9E@5<*?kq7dSh6 zW(>Ob2$ou4wm@Md>2`W+42_;Kq(H9jNr8PQ&$Srmaa{0M@9sB))k(kOExbVE{DKkf zSYZKzcmuYeDa=n--On=Xv4dD)>PxDXUX}O1*mhv`9)c_eEL~8BtpSx!>|`Ayjdri`7a#GQ=tdD44elIIgB?2ciGfHJkTM_G;ioY zj>SK6TdNHG$n3a7XuA2Zw^7G^T>LC-EsXaepM#e%>R2uDaM)s*1bKkvF$FWmrr>}T z2h-~p+wBFDS=v*%FXm2v348rM_J>}oEP_rKT3+9!Fx+Buz=JZ;>XSss)T~$c?bALB zVC~EE`h!M*g8{~_TTUS0ATa?Ad+@7q4yJX7&ApKH=LbVgpmA$*e7|qs|E6aK2`M|# z?7P*;)%90IB|w_lkFfsfC-e>Vn> z4apO^;#8+lQ!d`f8-rL?I>0HSBL2Em%gAup@)LcdgUP`9A$`cn>#L3(kh{Tu@@hzO z6xC2PoGJkE&X?DbZ+=IPVNn@BN7-J^h=4SBQxXX6v=BAQ9{YccK2XW+|M^VpjEhV` z3PA2b4EybBgy-O+fe&H9)SRe8DoR-`cvo|->H^fzU{EXc^vAb+>W?3=LS+{6Y$r2l z74I_%TGoIUd-DzWj+&mKtZUL#c9R4b=HTC`ByVIjRHGa4%%JJO8U?&=4Lmec zf(3W|YG5-bp4w)Qwx-(!fq^+|&<0YM$I=Z<;VvK!_`ftSR5DkD#SUmgJ6sQncg^V9 z&rOw!V0P7M;eCs``0cZ^{#b zsX|89oTh!KDOof=PLqSwA)st0LDToebAhd44aSm`?HNH>;PFwx&4r6tEqDSXUnc!` z-2JVBA{yZ1eJhx9^0kQtR14*4&)VJFx4Z61ja8rDo(G7sV&<9XK5=Tp}% z0duHc85naJ#Asw!sAkObAI8xf$CUdJW^$1a!gmTSc(!k@IyOvz^GPO!duQ{STp$sk z!TA@UOi5m5w*^~KexVH=AovZ!k;_cwf4&v(ELx}fq&xXv;Ko5{sv4UBpL7Q-)2Y{ub66seePBl806r0+l*ycuHr4_Ff3?JUPyUdc3pk^ zu!{2BL~$GJfA!W2WCZ(ypo>?PV5;9cc!g?J%KQu=`h073?{@yfYwx-r8wcpTxMlV< zyt^YLf>w%E;}7xqCz+wCTiKi_N}T{Y)SGdMrqSv2{Y8uZTI#CxdT|)ahq)=gWuxq4 zE#0pHe~{o|c9II@_U28?{#i#8;v2>_t(!5ZRJU}Lv4ye!e%YldH7eQ8VlAb7ULg}A zavQZ&NMzxxN|91FCqPZEuDAB$5g;l?HJYJNakNqJA#55;z@A_%K6sWoF0wBWZM6~Zd zXmMvT#~Eyu5~5~mV{CAQbaPo9&CCZqobh#FDe(>KWlQPKFu{n!MW-`0ofs8`*-`s# zkbE&XM+FrA(q_@;S>cWY1;Vut$8Z$pEq{m4{ zX|gRP*s&+jcb;T~JceVj%B}r~NgwrjU<-r5JjwZ#{#&gmY0wzZdA}xrW@D&Zw2f%5 z=uDpffL_lk3W^ILYvc{4PBZtibpWiXJ2=)>PQXz{#wr-mIG~y!$85zPXw3PVvzG%7 z&YHoR;VL7n_W#RB$2f9v)Img;vs6yf)PxJ55`De>#MyzqSg^Ch?Wajx(xdSoi<=kn$Y zI84T%HOqtk{iw|*P^FV*)<&3qR`gJR3FZgF89%x5Xa~%6YJ^$G{9FHp`;l2sPoCp{ z^3XDX!T+bXUbtC|93~Kxi-9wy*$+8y%_rJEVw*8FP}*8XW^!9QOva~ff&qtvPOoUr zo)_{;$u4gFd4n2ts3=D1gy5fi(l?T`Y^J06+^@%6r!n6x4dc_WDq*6Qe@c9CeTxtG z?<_A_f)r1p#wctR82MnAl16#NNXi`Lz_cJOVz&QIuIBP4^N< z5!TOCC2(I6Wu}2kG_;!tQ^0?s=N*g4o>oZ=`eB84#@;n1MtVVc$1YvJ5P5ScKS+!e zHNk%W+=xW2@D z!l=69CjPio(9 z!T|JNIax#5+i516^`ekk`}ndMaP%HJ+s-ck_Q$kngYV)t;`Pe^w-=xq?C;`<@xLxj zhurZ9x~~#=Z^RVP{f05MU#}kJ_kOm+#v(?J=abwLeh^%9jr|XU@m|mRON+m}1g+D2 z9bPqU-_r7z@l`u={<`a5KL5p});It1eZKiGOMl(9W#6l>%lE+Y+U8ZS{=I(+blXqC z^xjAAa;6u6w`c`}%IYiaZNG0_-xp@`2(*y4h^6^UBMkog#`tSa-17Uv6uXK%& z0Cnn?X$DUOCO(J>z^liBm%A-hy){7@>3-9>p!-dQ&k88QtkKb9IvufDU`=Yy*DIjK zyAb^|w1Acbx0-|QbrWEL-fnuq9B9d}Ye^G9D^MZo;BDd?Y)mIX%k)9Q2XsKihUzU% zZMZt%b!l!Y5#EiiT9Q!bf&3B%^j#L~u@oVQSh1r5urBFSx?pv1*PD6yQ_cg&X4cAl zdZm#kh%jk}G85?FX3$-o(Uy6@J3OytUjiP>58NAjIum%qyXA-efB)CY_}`s%9e6F( zo}x>h>Q6b?UNT>P$$Zds$1-4qe_6->fNlS`?EPVJe;$c%FZ%Op{lBb(iMLWBfn%_s z`&NSeZMR-^o|hYDQOOGRCI{1BH{dm^Tfx_?UVZ;;R=_VCF(i*D0t2Rv;pBBlpl~pC zH#od9hzANj>#p|#w|>DPBLtIyiGyMXmFJnlAt?)-i2G=&AO z&OtzeALyKqAG}_H(iANA#AHBj%zqF9y=S)xxOCN)>90z}=Hr^GU=x8NAlIY-z30}Z z#R+rFnqG%@Y>l8xBiK4Y2gm@`K+-FyYop6J6Lc*kBE9keb&D;Q4eo{ond1UyP=zg@O1TaS?83{1OQqk BR Date: Wed, 22 Jul 2026 16:19:29 -0600 Subject: [PATCH 09/25] Update order of v3 guide --- .../guides/migrating-to-v3/2024-10-09-migrating-to-v3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md b/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md index a24704e16..b706b023e 100644 --- a/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md +++ b/_posts/plotly_js/guides/migrating-to-v3/2024-10-09-migrating-to-v3.md @@ -4,7 +4,7 @@ display_as: guide language: plotly_js layout: base name: Migrating to Plotly.js v3 -order: 2 +order: 3 page_type: u-guide permalink: javascript/guides/migrating-to-v3/ redirect_from: From 41a438793b648f5d6d40daa4b2b58d788db49f9c Mon Sep 17 00:00:00 2001 From: Cameron DeCoster Date: Fri, 24 Jul 2026 13:45:41 -0600 Subject: [PATCH 10/25] Rename/add example images --- ..._antimeridian_v3.png => antimeridian_v3.png} | Bin ..._antimeridian_v4.png => antimeridian_v4.png} | Bin ...olor_heatmap_v3.png => color_heatmap_v3.png} | Bin ...olor_heatmap_v4.png => color_heatmap_v4.png} | Bin ...on_geo_autofit_v3.png => geo_autofit_v3.png} | Bin ...on_geo_autofit_v4.png => geo_autofit_v4.png} | Bin ...on_map_autofit_v3.png => map_autofit_v3.png} | Bin ...on_map_autofit_v4.png => map_autofit_v4.png} | Bin .../images/whats-new-in-v4/quiver_simple.png | Bin 0 -> 32374 bytes .../images/whats-new-in-v4/quiver_wind.png | Bin 0 -> 49448 bytes ...ankey_sort_auto.png => sankey_sort_auto.png} | Bin ...key_sort_input.png => sankey_sort_input.png} | Bin .../{migration_sankey_v3.png => sankey_v3.png} | Bin .../{migration_sankey_v4.png => sankey_v4.png} | Bin ...color_v3.png => scattermap_iconcolor_v3.png} | Bin ...color_v4.png => scattermap_iconcolor_v4.png} | Bin ...ol_v3.png => scattermap_legendsymbol_v3.png} | Bin ...ol_v4.png => scattermap_legendsymbol_v4.png} | Bin ...swatch_v3.png => shape_legend_swatch_v3.png} | Bin ...swatch_v4.png => shape_legend_swatch_v4.png} | Bin .../share_with_plotly_cloud_button.png | Bin 0 -> 21323 bytes .../share_with_plotly_cloud_dialog.png | Bin 0 -> 22903 bytes ...igration_tickmode_v3.png => tickmode_v3.png} | Bin ...igration_tickmode_v4.png => tickmode_v4.png} | Bin 24 files changed, 0 insertions(+), 0 deletions(-) rename all_static/images/whats-new-in-v4/{migration_antimeridian_v3.png => antimeridian_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_antimeridian_v4.png => antimeridian_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_color_heatmap_v3.png => color_heatmap_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_color_heatmap_v4.png => color_heatmap_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_geo_autofit_v3.png => geo_autofit_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_geo_autofit_v4.png => geo_autofit_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_map_autofit_v3.png => map_autofit_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_map_autofit_v4.png => map_autofit_v4.png} (100%) create mode 100644 all_static/images/whats-new-in-v4/quiver_simple.png create mode 100644 all_static/images/whats-new-in-v4/quiver_wind.png rename all_static/images/whats-new-in-v4/{migration_sankey_sort_auto.png => sankey_sort_auto.png} (100%) rename all_static/images/whats-new-in-v4/{migration_sankey_sort_input.png => sankey_sort_input.png} (100%) rename all_static/images/whats-new-in-v4/{migration_sankey_v3.png => sankey_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_sankey_v4.png => sankey_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_scattermap_iconcolor_v3.png => scattermap_iconcolor_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_scattermap_iconcolor_v4.png => scattermap_iconcolor_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_scattermap_legendsymbol_v3.png => scattermap_legendsymbol_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_scattermap_legendsymbol_v4.png => scattermap_legendsymbol_v4.png} (100%) rename all_static/images/whats-new-in-v4/{migration_shape_legend_swatch_v3.png => shape_legend_swatch_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_shape_legend_swatch_v4.png => shape_legend_swatch_v4.png} (100%) create mode 100644 all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png create mode 100644 all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png rename all_static/images/whats-new-in-v4/{migration_tickmode_v3.png => tickmode_v3.png} (100%) rename all_static/images/whats-new-in-v4/{migration_tickmode_v4.png => tickmode_v4.png} (100%) diff --git a/all_static/images/whats-new-in-v4/migration_antimeridian_v3.png b/all_static/images/whats-new-in-v4/antimeridian_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_antimeridian_v3.png rename to all_static/images/whats-new-in-v4/antimeridian_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_antimeridian_v4.png b/all_static/images/whats-new-in-v4/antimeridian_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_antimeridian_v4.png rename to all_static/images/whats-new-in-v4/antimeridian_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png b/all_static/images/whats-new-in-v4/color_heatmap_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_color_heatmap_v3.png rename to all_static/images/whats-new-in-v4/color_heatmap_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png b/all_static/images/whats-new-in-v4/color_heatmap_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_color_heatmap_v4.png rename to all_static/images/whats-new-in-v4/color_heatmap_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png b/all_static/images/whats-new-in-v4/geo_autofit_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_geo_autofit_v3.png rename to all_static/images/whats-new-in-v4/geo_autofit_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png b/all_static/images/whats-new-in-v4/geo_autofit_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_geo_autofit_v4.png rename to all_static/images/whats-new-in-v4/geo_autofit_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_map_autofit_v3.png b/all_static/images/whats-new-in-v4/map_autofit_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_map_autofit_v3.png rename to all_static/images/whats-new-in-v4/map_autofit_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_map_autofit_v4.png b/all_static/images/whats-new-in-v4/map_autofit_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_map_autofit_v4.png rename to all_static/images/whats-new-in-v4/map_autofit_v4.png diff --git a/all_static/images/whats-new-in-v4/quiver_simple.png b/all_static/images/whats-new-in-v4/quiver_simple.png new file mode 100644 index 0000000000000000000000000000000000000000..927373cceb1b7241250037f4c88ce260fb87d170 GIT binary patch literal 32374 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 literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/quiver_wind.png b/all_static/images/whats-new-in-v4/quiver_wind.png new file mode 100644 index 0000000000000000000000000000000000000000..83fef97c0b958bbc1f16d01ffc3d240b35c44198 GIT binary patch literal 49448 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 MPDM8Vj`7R?1F(B*$^ZZW literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png b/all_static/images/whats-new-in-v4/sankey_sort_auto.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_sankey_sort_auto.png rename to all_static/images/whats-new-in-v4/sankey_sort_auto.png diff --git a/all_static/images/whats-new-in-v4/migration_sankey_sort_input.png b/all_static/images/whats-new-in-v4/sankey_sort_input.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_sankey_sort_input.png rename to all_static/images/whats-new-in-v4/sankey_sort_input.png diff --git a/all_static/images/whats-new-in-v4/migration_sankey_v3.png b/all_static/images/whats-new-in-v4/sankey_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_sankey_v3.png rename to all_static/images/whats-new-in-v4/sankey_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_sankey_v4.png b/all_static/images/whats-new-in-v4/sankey_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_sankey_v4.png rename to all_static/images/whats-new-in-v4/sankey_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v3.png b/all_static/images/whats-new-in-v4/scattermap_iconcolor_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v3.png rename to all_static/images/whats-new-in-v4/scattermap_iconcolor_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v4.png b/all_static/images/whats-new-in-v4/scattermap_iconcolor_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_scattermap_iconcolor_v4.png rename to all_static/images/whats-new-in-v4/scattermap_iconcolor_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v3.png b/all_static/images/whats-new-in-v4/scattermap_legendsymbol_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v3.png rename to all_static/images/whats-new-in-v4/scattermap_legendsymbol_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v4.png b/all_static/images/whats-new-in-v4/scattermap_legendsymbol_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_scattermap_legendsymbol_v4.png rename to all_static/images/whats-new-in-v4/scattermap_legendsymbol_v4.png diff --git a/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v3.png b/all_static/images/whats-new-in-v4/shape_legend_swatch_v3.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v3.png rename to all_static/images/whats-new-in-v4/shape_legend_swatch_v3.png diff --git a/all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v4.png b/all_static/images/whats-new-in-v4/shape_legend_swatch_v4.png similarity index 100% rename from all_static/images/whats-new-in-v4/migration_shape_legend_swatch_v4.png rename to all_static/images/whats-new-in-v4/shape_legend_swatch_v4.png diff --git a/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png b/all_static/images/whats-new-in-v4/share_with_plotly_cloud_button.png new file mode 100644 index 0000000000000000000000000000000000000000..4dae7fc02bcd543e80a2f09fd1a05b22b621727c GIT binary patch literal 21323 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 literal 0 HcmV?d00001 diff --git a/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png b/all_static/images/whats-new-in-v4/share_with_plotly_cloud_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..192482fe452512c3f42c50db327f416a95e28d70 GIT binary patch literal 22903 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