Plotly Open Source Graphing Libraries
+ ++ Interactive charts and maps for Python, Javascript, and Dash. +
++ +
diff --git a/.gitignore b/.gitignore index 54c049475cc..4fefea4a4f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ node_modules +_site + +__pycache__ build/* !build/plotcss.js @@ -17,3 +20,7 @@ tags !.github/ !.gitignore !.npmignore + +tmp + +docs/ diff --git a/BUILDING.md b/BUILDING.md deleted file mode 100644 index c5ee25e7765..00000000000 --- a/BUILDING.md +++ /dev/null @@ -1,67 +0,0 @@ -# Alternative ways to require or build plotly.js -Depending on your needs you may require/import one of [the distributed plotly.js packages](https://github.com/plotly/plotly.js/blob/master/dist/README.md) or [a plotly.js/lib index file](https://github.com/plotly/plotly.js/tree/master/lib) and integrate it into your application. - -The sections below provide additional info in respect to alternative building frameworks. - ---- -## Angular CLI - -Since Angular uses webpack under the hood and doesn't allow easily to change it's webpack configuration, there is some work needed using a `custom-webpack` builder to get things going. - -1. Install [`@angular-builders/custom-webpack`](https://www.npmjs.com/package/@angular-builders/custom-webpack) and [ify-loader@v1.1.0+](https://github.com/hughsk/ify-loader) -2. Create a new `extra-webpack.config.js` beside `angular.json`. - -> extra-webpack.config.json -```javascript -module.exports = { - module: { - rules: [ - { - test: /\.js$/, - include: [ - path.resolve(__dirname, "node_modules/plotly.js") - ], - loader: 'ify-loader' - } - ] - }, -}; -``` - -3. Change the builder in `angular.json` to `"@angular-builders/custom-webpack:browser` and configure it correctly to use our new webpack config. - -> angular.json -```json -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "MY_PROJECT_NAME": { - "root": "", - "sourceRoot": "src", - "projectType": "application", - "prefix": "app", - "schematics": { - "@schematics/angular:component": { - "styleext": "scss" - } - }, - "architect": { - "build": { - "builder": "@angular-builders/custom-webpack:browser", - "options": { - .... - "customWebpackConfig": { - "path": "./extra-webpack.config.js", - "replaceDuplicatePlugins": true, - "mergeStrategies": {"module.rules": "merge"} - } - } - } -... -``` - -It's important to set `projects.x.architect.build.builder` and `projects.x.architect.build.options.customWebpackConfig`. -If you have more projects in your `angular.json` make sure to adjust their settings accordingly. ---- diff --git a/code_of_conduct.md b/CODE_OF_CONDUCT.md similarity index 100% rename from code_of_conduct.md rename to CODE_OF_CONDUCT.md diff --git a/CONTRIBUTING-DOCS.md b/CONTRIBUTING-DOCS.md new file mode 100644 index 00000000000..ebcf4e94298 --- /dev/null +++ b/CONTRIBUTING-DOCS.md @@ -0,0 +1,151 @@ +# Contribute to Plotly's [JavaScript Documentation](https://plotly.com/javascript/) + +Plotly welcomes contributions to its [open-source JavaScript graphing libraries documentation](https://plotly.com/javascript) from its community of users. + +Our JavaScript tutorials are written in HTML files in the `_posts/plotly_js` directory of this repository. + +## Contribute Quickly to Plotly's JavaScript Graphing Library Documentation + +To quickly make a contribution to Plotly's JavaScript graphing libraries documentation, simply submit a pull request with the change you would like to suggest. This can be done using the GitHub graphical user interface at https://github.com/plotly/graphing-library-docs. + +The easiest way to do this is to follow the `Edit this page on GitHub` link at the top right of the page you are interested in contributing to: + + + +**You don't have to worry about breaking the site when you submit a pull request!** This is because your change will not be merged to production immediately. A Plotly team member will first perform a code review on your pull request in order to ensure that it definitely increases the health of Plotly's graphing libraries codebase. + +## Develop Locally + +For contributions such as new example posts, we recommend setting up a local development environment so that you can test your changes as you work on them. + +**See the `How To Get The Application Working Locally` section of the [Contributing Guide](https://github.com/plotly/graphing-library-docs/blob/master/Contributing.md) to learn how to clone this repository to your local development environment and install its dependencies.** + +Then follow these instructions to create or modify a new post. If the post is the first of its chart type, you need to create an index page for it first. + +## Create An Index Page For A New Chart Type: + +If you are documenting a new chart type, then you need to create an index page for it before creating the actual example page. + +1. In `documentation/_posts/plotly_js`, create a folder titled with the chart type or topic you're adding to the documentation (i.e. `bar`). + +2. `cd` into the folder you created and create an HTML index file for the chart type named: `yyyy-mm-dd-chart_type_plotly_js_index.html`. Copy the index file template below. Make sure to replace placeholder text! +``` +--- +name: Add-Chart-Type-or-Topic +permalink: javascript/add-chart-type-or-topic/ +description: How to make a D3.js-based add-chart-type-or-topic in javascript. Add an additional sentence summarizing chart-type or topic. +layout: langindex +thumbnail: thumbnail/mixed.jpg +language: plotly_js +page_type: example_index +display_as: **SEE BELOW +order: 5 +--- + {% assign examples = site.posts | where:"language","plotly_js" | where:"suite","add-chart-type-or-topic"| sort: "order" %} + {% include posts/auto_examples.html examples=examples %} +``` + - Make sure to update `_includes/posts/documentation_eg.html`, `_includes/layouts/side-bar.html`, and `_data/display_as_py_r_js.yml` and the CI python scripts with the new chart type! + + - Index pages for chart categories must have `order: 5`. + +## Create A New Example Post: + +1. In the folder containing the examples for the chart type you are writing documentation for, create a file named: `yyyy-mm-dd-example-title.html`. + +2. Copy the example post template below and write JavaScript code to demonstrate the feature you are documenting. + - If `plot_url` front-matter is not present, then the resulting chart will be displayed inline and a `Try It Codepen` button will be automatically generated. + - If `plot_url` front-matter is present, then the URL given will be embedded in an `iframe` below the example. +``` +--- +description: How to make a D3.js-based bar chart in javascript. Seven examples of +grouped, stacked, overlaid, and colored bar charts. +display_as: basic +language: plotly_js +layout: base +name: Bar Charts +order: 3 +page_type: example_index +permalink: javascript/bar-charts/ +redirect_from: javascript-graphing-library/bar-charts/ +thumbnail: thumbnail/bar.jpg **MORE INFO ON ADDING THUMBNAILS BELOW +markdown_content: | + indented content in markdown format which will prefix an example ****SEE BELOW +--- +var data = [ + { + x: ['giraffes', 'orangutans', 'monkeys'], + y: [20, 14, 23], + type: 'bar' + }The +]; + +Plotly.newPlot('myDiv', data); +``` + +- `display_as` sets where your tutorial is displayed. Make sure to update `_includes/posts/documentation_eg.html` with the new chart type!: + - 'file_settings' = https://plotly.com/javascript/plotly-fundamentals + - 'basic' = https://plotly.com/javascript/basic-charts + - 'statistical' = https://plotly.com/javascript/statistical-charts + - 'scientific' = https://plotly.com/javascript/scientific-charts + - 'financial' = https://plotly.com/javascript/financial-charts + - 'maps' = https://plotly.com/javascript/maps + - '3d_charts' = https://plotly.com/javascript/3d-charts + - See additional options [HERE](https://github.com/plotly/graphing-library-docs/blob/master/_includes/posts/documentation_eg.html#L1) + + - `order` defines the order in which the tutorials appear in each section on plot.ly/javascript. + - Note The `order` of posts within a `display_as` must be a set of consecutive integers (i.e. [1, 2, 3, 4, 5, 6, ...]). + - If a post has an `order` less than 5, it **MUST** also have the `page_type: example_index` front-matter so that it gets displayed on the index page. + + - `markdown_content` is rendered directly above the examples. In general, it is best to *avoid* paragraph-formatted explanation and let the simplicity of the example speak for itself, but that's not always possible. Take note that headings in this block *are* reflected in the sidebar. + + - Thumbnail images should named `your-tutorial-chart.jpg` and be *EXACTLY* 160px X 160px. + - posts in the following `display_as` categories **MUST** have a thumbnail + - 'file_settings' = https://plotly.com/javascript/plotly-fundamentals + - 'basic' = https://plotly.com/javascript/basic-charts + - 'statistical' = https://plotly.com/javascript/statistical-charts + - 'scientific' = https://plotly.com/javascript/scientific-charts + - 'financial' = https://plotly.com/javascript/financial-charts + - 'maps' = https://plotly.com/javascript/maps + - '3d_charts' = https://plotly.com/javascript/3d-charts + - Thumbnail images should be clear and interesting. You do not need to capture the ENTIRE chart, but rather focus on the most interesting part of the chart. + - Use images.plot.ly for adding new images. The password is in the Plotly 1Password Engineering Vault. + - Log-in here: https://661924842005.signin.aws.amazon.com/console + - From the Amazon Web Services Console select S3 (Scalable Storage in the Cloud) then select plotly-tutorials -> plotly-documentation -> thumbnail + - Now from All Buckets /plotly-tutorials/plotly-documentation/thumbnail select the Actions dropdown and upload your .jpg file + +## Modify An Existing Post: + +1. Find the post you want to modify in `_posts/plotly_js`. Then, open the HTML file that contains that post and modify either the front-matter or the JavaScript. + +# Best Practices: + - `order` examples from basic to advanced + - avoid the use of global JavaScript variables for `data` and `layout`. + - make the chart display in a DOM element named `myDiv` + - use the `.newPlot()` function + - 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. + +## Make a Pull Request + - Ready for your changes to be reviewed? Make a pull request! + + - Create a feature branch and use `git status` to list changed files. + ``` + git checkout -b your_feature_branch + git status + ``` + - Add, commit, and push the files that you'd like to add to your PR: + ``` + git add file-a + git add file-b + git commit -m 'message about your changes' + git push origin your_feature_branch + ``` + - Visit the [documentation repo](https://github.com/plotly/graphing-library-docs) and open a pull request!. You can then tag **@jdamiba** for a review. + +## Style Edits + +Please refer to our [Styles README](https://github.com/plotly/graphing-library-docs/blob/master/style_README.md) + +Thanks for contributing to our documentation!! diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 14be34d8b8d..96d7b25c2d9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,11 +12,11 @@ environment for doing development and running tests. Please check out our [Code of Conduct](code_of_conduct.md). Don't tl:dr; it but the general idea is to be nice. -## Plotly.js vs Plotly.py and Plotly.R +## Plotly.js vs Plotly.py -[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python and R modules named `plotly` in those respective ecosystems (referred to as [Plotly.py](https://plotly.com/python) and [Plotly.R](http://plotly.com/r), respectively, for clarity). There also exist Plotly.js-powered libraries for other languages such as Julia, Scala, Rust, .NET and even C++! +[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python module named `plotly` (referred to as [Plotly.py](https://plotly.com/python) for clarity). -The basic architecture of Plotly.js is to accept [JSON](https://json.org/) representation of figures that adhere to the [figure schema](https://plotly.com/javascript/reference/index/) and draw interactive graphical representations of these figures in a browser. Libraries in other languages like Python and R provide idiomatic interfaces for users of those languages to create and manipulate these JSON structures, and arrange for them to be rendered in a browser context by Plotly.js. This means that in many cases, when a Python or R user wishes to add a feature to the library they know as `plotly`, the relevant changes must be implemented in Plotly.js, in this repo. +The basic architecture of Plotly.js is to accept [JSON](https://json.org/) representation of figures that adhere to the [figure schema](https://plotly.com/javascript/reference/index/) and draw interactive graphical representations of these figures in a browser. The Python library provides an idiomatic interface for Python users to create and manipulate these JSON structures, and arrange for them to be rendered in a browser context by Plotly.js. This means that in many cases, when a Python user wishes to add a feature to the library they know as `plotly`, the relevant changes must be implemented in Plotly.js, in this repo. ## How do changes get made to Plotly.js? @@ -37,7 +37,8 @@ The basic process for adding new features or fixing bugs is as follows. Please n The current Plotly.js maintainers are all employees of Plotly (the company) and one of their primary responsibilities is ensuring the process above runs smoothly. It is worth noting that maintainers and non-maintainer Plotly employees all follow the process above: proposing changes, iterating on proposals and eventually developing and reviewing each other's pull requests. As mentioned above, maintainers look after bug fixes, performance, security, documentation and concerns that impact the long-term prospects for this library. In terms of development work, maintainers tend to prioritize issues that do or are likely to impact Plotly customers, as well as on [sponsored features or bug fixes](https://plot.ly/products/consulting-and-oem/). Sponsored work proceeds via the process listed above, albeit with the option of conducting portions of the "discussion" step in a confidential setting if desired. Please note that maintainers are happy and eager to help with community-led pull requests, independent of customer-driven development priorities :) ### The Plotly.js Community -The Plotly.js community, construed fairly broadly, includes the maintainers and all users of Plotly.js and associated projects ([Plotly.py](https://plotly.com/python), [Dash](https://dash.plotly.com/), [Plotly.R](https://plotly.com/r), [Chart Studio](https://plotly.com/chart-studio) and many others). The community includes people from any background, domain, affiliation and level of technical expertise, for example (but not limited to!) employees of small or large companies or startups; employees or students of universities or other educational institutions; government employees and contractors; employees and volunteers of non-profits; individual hobbyists etc. + +The Plotly.js community, construed fairly broadly, includes the maintainers and all users of Plotly.js and associated projects ([Plotly.py](https://plotly.com/python), [Dash](https://dash.plotly.com/), and others supported by the open source community). The community includes people from any background, domain, affiliation and level of technical expertise, for example (but not limited to!) employees of small or large companies or startups; employees or students of universities or other educational institutions; government employees and contractors; employees and volunteers of non-profits; individual hobbyists etc. **Anyone in the community is encouraged to contribute to every step of the process described above!** Creating issues to report bugs or suggest new behaviours is a valuable contribution to this project, as is proposing a concrete set of changes to address issues created by anyone at any time. In the same way, giving feedback on proposals created by anyone in the community is valuable, as is, of course, development and review work. [Proposing changes to the documentation of Plotly.js or associated projects](https://github.com/plotly/graphing-library-docs/blob/master/README.md) is an extremely valuable form of contribution, as is [asking or answering questions on our community forum](https://community.plotly.com/), as it creates a record of a question and discussion, which others can stumble across later and use to further their own work. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..58f1ff6f6e8 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +# Manage plotly.js documentation. + +RUN = uv run +SCHEMA_SRC = test/plot-schema.json +HANDWRITTEN = content +TMP = tmp + +EXAMPLES_DIR = ${HANDWRITTEN}/plotly_js +EXAMPLES_IN := $(shell find "${EXAMPLES_DIR}" -name '*.html') +EXAMPLES_TMP = ${TMP}/javascript +EXAMPLES_OUT = ${EXAMPLES_TMP}/axes/index.html # could be any of the generated files + +REFERENCE_DIR = ${HANDWRITTEN}/reference_pages/javascript/ +REFERENCE_IN := $(wildcard ${REFERENCE_DIR}/*.html) +REFERENCE_TMP = ${TMP}/reference +REFERENCE_OUT = ${REFERENCE_TMP}/bar/index.html # could be any of the generated files + +DOCS_DIR=docs +DOCS_OUT=${DOCS_DIR}/sitemap.xml + +## commands: show available commands +commands: + @grep -h -E '^##' ${MAKEFILE_LIST} | sed -e 's/## //g' | column -t -s ':' + +## docs: rebuild full documentation in `./docs` +.PHONY: docs +docs: ${DOCS_OUT} + +${DOCS_OUT}: ${EXAMPLES_OUT} ${REFERENCE_OUT} + @${RUN} mkdocs build + +## examples: build intermediate example documentation in ./tmp +examples: ${EXAMPLES_OUT} + +${EXAMPLES_OUT}: bin/example_pages.py ${EXAMPLES_IN} + @mkdir -p ${TMP} + @${RUN} bin/example_pages.py --indir ${EXAMPLES_DIR} --outdir ${EXAMPLES_TMP} --jsversion 3.2.1 + +## reference: build intermediate reference documentation in ./tmp +reference: ${REFERENCE_OUT} + +${REFERENCE_OUT}: bin/reference_pages.py ${SCHEMA_SRC} ${REFERENCE_IN} + @mkdir -p ${TMP} + @${RUN} bin/reference_pages.py --schema ${SCHEMA_SRC} --outdir ${REFERENCE_TMP} ${REFERENCE_IN} + +## serve: display documentation +serve: + ${RUN} mkdocs serve + +## --: -- + +## clean: clean up repository +clean: + @find . -name '*~' -delete + @find . -name '.DS_Store' -delete + @rm -rf docs ${TMP} + +## format: reformat Python code +format: + @ruff format bin + +## lint: check code and project +lint: + @ruff check bin diff --git a/README.md b/README.md index 218a7d49c7a..e56ac0da82c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [](https://circleci.com/gh/plotly/plotly.js) [](https://github.com/plotly/plotly.js/blob/master/LICENSE) -[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python and R modules named `plotly` in those respective ecosystems (referred to as [Plotly.py](https://plotly.com/python) and [Plotly.R](http://plotly.com/r)). +[Plotly.js](https://plotly.com/javascript) is a standalone Javascript data visualization library, and it also powers the Python module named `plotly` (referred to as [Plotly.py](https://plotly.com/python)). Plotly.js can be used to produce dozens of chart types and visualizations, including statistical charts, 3D graphs, scientific charts, SVG and tile maps, financial charts and more. @@ -22,22 +22,20 @@ Plotly.js can be used to produce dozens of chart types and visualizations, inclu +## Table of Contents -## Table of contents - -* [Load as a node module](#load-as-a-node-module) -* [Load via script tag](#load-via-script-tag) +* [Load as a Node Module](#load-as-a-node-module) +* [Load via Script Tag](#load-via-script-tag) * [Bundles](#bundles) -* [Alternative ways to load and build plotly.js](#alternative-ways-to-load-and-build-plotlyjs) * [Documentation](#documentation) -* [Bugs and feature requests](#bugs-and-feature-requests) +* [Bugs and Feature Requests](#bugs-and-feature-requests) * [Contributing](#contributing) -* [Notable contributors](#notable-contributors) +* [Notable Contributors](#notable-contributors) * [Copyright and license](#copyright-and-license) * [Community](#community) ---- -## Load as a node module +## Load as a Node Module + Install [a ready-to-use distributed bundle](https://github.com/plotly/plotly.js/blob/master/dist/README.md) ```sh npm i --save plotly.js-dist-min @@ -54,10 +52,10 @@ var Plotly = require('plotly.js-dist-min') You may also consider using [`plotly.js-dist`](https://www.npmjs.com/package/plotly.js-dist) if you prefer using an unminified package. ---- -## Load via script tag +## Load via Script Tag + +### The `script` HTML Element -### The script HTML element > In the examples below `Plotly` object is added to the window scope by `script`. The `newPlot` method is then used to draw an interactive figure as described by `data` and `layout` into the desired `div` here named `gd`. As demonstrated in the example above basic knowledge of `html` and [JSON](https://en.wikipedia.org/wiki/JSON) syntax is enough to get started i.e. with/without JavaScript! To learn and build more with plotly.js please visit [plotly.js documentation](https://plotly.com/javascript). ```html @@ -77,6 +75,7 @@ You may also consider using [`plotly.js-dist`](https://www.npmjs.com/package/plo ``` Alternatively you may consider using [native ES6 import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) in the script tag. + ```html ``` @@ -95,7 +96,9 @@ While non-minified source files may contain characters outside UTF-8, it is reco > Please note that as of v2 the "plotly-latest" outputs (e.g. https://cdn.plot.ly/plotly-latest.min.js) will no longer be updated on the CDN, and will stay at the last v1 patch v1.58.5. Therefore, to use the CDN with plotly.js v2 and higher, you must specify an exact plotly.js version. ### MathJax + You could load either version two or version three of MathJax files, for example: + ```html ``` @@ -108,21 +111,20 @@ You could load either version two or version three of MathJax files, for example Please refer to `devtools/test_dashboard/index-mathjax3chtml.html` to see an example. ### Need to have several WebGL graphs on a page? + You may simply load [virtual-webgl](https://github.com/greggman/virtual-webgl) script for WebGL 1 (not WebGL 2) before loading other scripts. + ```html ``` ## Bundles + There are two kinds of plotly.js bundles: + 1. Complete and partial official bundles that are distributed to `npm` and the `CDN`, described in [the dist README](https://github.com/plotly/plotly.js/blob/master/dist/README.md). 2. Custom bundles you can create yourself to optimize the size of bundle depending on your needs. Please visit [CUSTOM_BUNDLE](https://github.com/plotly/plotly.js/blob/master/CUSTOM_BUNDLE.md) for more information. ---- -## Alternative ways to load and build plotly.js -If your library needs to bundle or directly load [plotly.js/lib/index.js](https://github.com/plotly/plotly.js/blob/master/lib/index.js) or parts of its modules similar to [index-basic](https://github.com/plotly/plotly.js/blob/master/lib/index-basic.js) in some other way than via an official or a custom bundle, or in case you want to tweak the default build configurations, then please visit [`BUILDING.md`](https://github.com/plotly/plotly.js/blob/master/BUILDING.md). - ---- ## Documentation Official plotly.js documentation is hosted at [https://plotly.com/javascript](https://plotly.com/javascript). @@ -130,18 +132,15 @@ Official plotly.js documentation is hosted at [https://plotly.com/javascript](ht These pages are generated by the Plotly [graphing-library-docs repo](https://github.com/plotly/graphing-library-docs) built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages. For more info about contributing to Plotly documentation, please read through [contributing guidelines](https://github.com/plotly/graphing-library-docs/blob/master/README.md). ---- -## Bugs and feature requests +## Bugs and Feature Requests Have a bug or a feature request? Please [open a Github issue](https://github.com/plotly/plotly.js/issues/new) keeping in mind the [issue guidelines](https://github.com/plotly/plotly.js/blob/master/.github/ISSUE_TEMPLATE.md). You may also want to read about [how changes get made to Plotly.js](https://github.com/plotly/plotly.js/blob/master/CONTRIBUTING.md) ---- ## Contributing Please read through our [contributing guidelines](https://github.com/plotly/plotly.js/blob/master/CONTRIBUTING.md). Included are directions for opening issues, using plotly.js in your project and notes on development. ---- -## Notable contributors +## Notable Contributors Plotly.js is at the core of a large and dynamic ecosystem with many contributors who file issues, reproduce bugs, suggest improvements, write code in this repo (and other upstream or downstream ones) and help users in the Plotly community forum. The following people deserve special recognition for their outsized contributions to this ecosystem: @@ -171,7 +170,6 @@ Plotly.js is at the core of a large and dynamic ecosystem with many contributors |**Alex Vados**| [@alexander-daniel](https://github.com/alexander-daniel) | Hall of Fame | |**Mojtaba Samimi** | [@archmoj](https://github.com/archmoj) | Hall of Fame | ---- ## Copyright and license Code and documentation copyright 2025 Plotly, Inc. @@ -184,7 +182,6 @@ This project is maintained under the [Semantic Versioning guidelines](https://se See the [Releases section](https://github.com/plotly/plotly.js/releases) of our GitHub project for changelogs for each release version of plotly.js. ---- ## Community * Follow us on [X](https://x.com/plotlygraphs) and [LinkedIn](https://www.linkedin.com/company/plotly/) for the latest Plotly news. diff --git a/bin/example_pages.py b/bin/example_pages.py new file mode 100644 index 00000000000..c09c9e6862c --- /dev/null +++ b/bin/example_pages.py @@ -0,0 +1,267 @@ +"""Rebuild plotly.js example pages from Jekyll HTML.""" + +import argparse +import frontmatter +from html import escape +import json +from markdown import markdown +from pathlib import Path +import re +from mkdocs.config import load_config +from utils import _log + + +HTML_TAG_RE = re.compile(r"<[^>]*>") +SUITE_RE = re.compile(r'where:"suite","(.+?)"') + + +def main(): + """Main driver.""" + args = _parse_args() + index_files, example_files = _get_source_files(args) + for path, record in index_files.items(): + _process(args, path, record, example_files) + + +def _get_source_files(args): + """Load and classify source files.""" + index_files = {} + example_files = {} + for filepath in args.indir.glob("**/*.html"): + page = frontmatter.load(filepath) + record = {"header": page.metadata, "content": page.content} + if not str(filepath).endswith("index.html"): + example_files[filepath] = record + elif "posts/auto_examples.html" in page.content: + index_files[filepath] = record + return index_files, example_files + + +def _get_suite(path, content): + """Get suite specification from index file.""" + m = SUITE_RE.search(content) + if _log(not m, f"cannot find 'suite' in index file {path}"): + return None + return m.group(1) + + +def _make_html(args, examples): + """Build HTML page full of examples.""" + accum = [] + for counter, (path, record) in enumerate(examples): + header = record["header"] + content = record["content"] + accum.append('
{text}
+ + {text} ++""" + + +def _make_html_text(accum, path, header, content): + """Make text of example.""" + # columns = "twelve" if "horizontal" in header.get("arrangement", "") else "six" + markdown_content = markdown(header.get("markdown_content", "")) + page_content = ( + HTML_TEXT_PAGE_CONTENT.format(text=escape(content)) if content else "" + ) + description = header.get("description", "") + description = HTML_TEXT_DESCRIPTION.format(text=description) if description else "" + accum.append( + HTML_TEXT.format( + markdown_content=markdown_content, + page_content=page_content, + description=description, + ) + ) + + +MYDIV_D3 = "\n\t<script src='https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js'></script>" +MYDIV_MATHJAX = "\n\t<script src='//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML'></script>" + +MYDIV = """\ + + + +""" + + +def _make_mydiv(args, accum, path, header, content, counter): + """Handle myDiv case.""" + if ("'myDiv'" not in content) and ('"myDiv"' not in content): + return False + + d3 = MYDIV_D3 if "d3." in content else "" + mathjax = MYDIV_MATHJAX if "remember to load MathJax.js" in content else "" + # columns = "twelve" if "horizontal" in header.get("arrangement", "") else "six" + name = header["name"] + unique_mydiv = f"myDiv_{counter}" + content_mydiv = content.replace("myDiv", unique_mydiv) + content_json = escape(json.dumps(content)) + + # Get JS Version + mkdocs_path = Path(__file__).resolve().parent.parent / "mkdocs.yml" + config = load_config(config_file=str(mkdocs_path)) + extra = config.get("extra", {}) + version = extra.get("js_version") + + accum.append( + MYDIV.format( + d3=d3, + mathjax=mathjax, + name=name, + unique_mydiv=unique_mydiv, + content_mydiv=content_mydiv, + content_json=content_json, + jsversion=version, + ) + ) + + return True + + +PLOT_URL = """\ + {plot_url_img} + {plot_url_embed} +""" + +PLOT_URL_IMG = """\ +
(.+?).*{trace_name} trace is an object with the key "type" equal to "{trace_data_attributes_type}"
+ (i.e. {{"type": "{trace_data_attributes_type}"}}) and any of the keys listed below.
+ {parent_path.replace('-', '.')}\n"
+ )
+
+ if (key == "type") and (block == "data"):
+ accum.append("{escape(value.get('description'))}
\n") + + if _get(value, "role") == "object": + _reference_block_object( + args, src_path, accum, parent_link, parent_path, key, value + ) + + accum.append("{_bool_or_star(sub_value)}")
+ accum.append(f"{inner})\n")
+
+ elif _get(value, "valType") in {"number", "integer"}:
+ accum.append(f"{inner}Type: {_get(value, 'valType')}")
+ if _get(value, "arrayOk"):
+ accum.append(f" or array of {_get(value, 'valType')}s")
+ if _get(value, "min") and _get(value, "max"):
+ accum.append(
+ f" between or equal to {_get(value, 'min')} and {_get(value, 'max')}\n"
+ )
+ elif _get(value, "min"):
+ accum.append(f" greater than or equal to {_get(value, 'min')}\n")
+ elif _get(value, "max"):
+ accum.append(f" less than or equal to {_get(value, 'max')}\n")
+
+ elif _get(value, "valType") == "boolean":
+ accum.append(f"{inner}Type: {_get(value, 'valType')}")
+ if _get(value, "arrayOk"):
+ accum.append(f" or array of {_get(value, 'valType')}s")
+
+ elif _get(value, "valType") == "flaglist":
+ accum.append(f"{inner}Type: {_get(value, 'valType')} string.\n\n")
+ flags = _get(value, "flags")
+ if not flags:
+ print(f"no flags for flaglist {key} in {src_path}", file=sys.stderr)
+ return
+
+ accum.append(f"{inner}Any combination of ")
+ for i, f in enumerate(flags):
+ _comma(accum, i)
+ accum.append(_bool_or_star(f))
+ accum.append(" joined with a *+*\n")
+ accum.append(f"{inner}OR ")
+
+ extras = _get(value, "extras")
+ if extras:
+ for i, x in enumerate(extras):
+ _comma(accum, i)
+ accum.append(_bool_or_star(x))
+
+ accum.append(".\n\n")
+ accum.append(f"{inner}*{flags[0]}*, ")
+ accum.append(f"*{flags[1]}*, ")
+ accum.append(f"*{flags[0]}+{flags[1]}*, ")
+ if len(flags) > 2:
+ accum.append(f"*{flags[0]}+{flags[1]}+{flags[2]}*, ")
+ if extras:
+ accum.append(f"*{extras[0]}*")
+ accum.append("\n\n")
+
+ elif _get(value, "valType") == "data_array":
+ accum.append(f"{inner}Type: {_get(value, 'valType')}\n")
+
+ elif _get(value, "valType") == "info_array":
+ accum.append("{inner}Type: {{array}}\n")
+
+ elif _get(value, "valType") == "color":
+ accum.append(f"{inner}Type: {_get(value, 'valType')}")
+ if _get(value, "arrayOk"):
+ accum.append(f" or array of {_get(value, 'valType')}s")
+
+ elif _get(value, "valType") == "any":
+ accum.append(f"{inner}Type: number or categorical coordinate string\n")
+
+ elif _get(value, "valType") == "string":
+ if "src" in key:
+ return
+ accum.append(f"{inner}Type: string")
+ if _get(value, "arrayOk"):
+ accum.append(" or array of strings")
+
+ else:
+ accum.append(f"{inner}Type: {_get(value, 'valType')}\n")
+
+ if _get(value, "role") == "object":
+ if _get(value, "items"):
+ accum.append(f"{inner}Type: {{array}} of {{object}}s")
+ else:
+ accum.append(f"{inner}Type: {{object}}")
+
+
+def _reference_block_dflt(src_path, accum, key, value):
+ """Handle a default."""
+ outer = " " * 16
+ if _get(value, "valType") == "flaglist":
+ accum.append(
+ f"{outer}*{_get(value, 'dflt')}*\n"
+ )
+ else:
+ accum.append(f"{outer}")
+ if _get(value, "dflt") == "":
+ accum.append("**")
+ elif _get(value, "valType") == "colorscale":
+ temp = [f"[{', '.join(_str(d))}]" for d in _get(value, "dflt")]
+ accum.append(f"[{', '.join(temp)}]")
+ elif _get(value, "valType") in {"info_array", "colorlist"}:
+ accum.append(f"[{', '.join([_str(x) for x in _get(value, 'dflt')])}]")
+ elif (_get(value, "valType") in {"string", "color"}) or (
+ _get(value, "dflt") == "auto"
+ ):
+ accum.append(f"*{_get(value, 'dflt')}*")
+ elif (_get(value, "valType") == "enumerated") and (
+ _get(value, "dflt") not in {"true", "false"}
+ ):
+ accum.append(f"*{_get(value, 'dflt')}*")
+ else:
+ accum.append(_get(value, "dflt"))
+ accum.append("\n")
+
+
+def _reference_block_array(src_path, accum, key, value):
+ """Handle an array."""
+ outer = " " * 12
+ inner = " " * 16
+ accum.append(f"{outer}+ Interactive charts and maps for Python, Javascript, and Dash. +
+{{page.description}}
+ {% include layouts/dashplug.html %} +Plotly.addFrames
+plot_url: https://codepen.io/plotly/embed/wzGOgd/?height=500&theme-id=15263&default-tab=result
+language: plotly_js
+suite: animations
+order: 3
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ The above examples pass the data itself through the Plotly.animate command. You may instead predefine named frames through the Plotly.addFrames command. Then, instead of passing frames through `Plotly.animate`, you may simply refer to a frame by name.
+
+ Similar to traces, frames are assigned a serial index as they are added. Frames may be updated by passing an array of frame indices. For example, the command to update the frame with index 2 would be `Plotly.addFrames('myDiv', [{...}], [2])`. Frames can be similarly deleted with, for example, `Plotly.deleteFrames('myDiv', [2])`.
+
+ The following example uses frames together with an `updatemenu` for interactive transitions.
+---
+var frames = [
+ {name: 'sine', data: [{x: [], y: []}]},
+ {name: 'cosine', data: [{x: [], y: []}]},
+ {name: 'circle', data: [{x: [], y: []}]},
+];
+
+var n = 100;
+for (var i = 0; i < n; i++) {
+ var t = i / (n - 1) * 2 - 1;
+
+ // A sine wave:
+ frames[0].data[0].x[i] = t * Math.PI;
+ frames[0].data[0].y[i] = Math.sin(t * Math.PI);
+
+ // A cosine wave:
+ frames[1].data[0].x[i] = t * Math.PI;
+ frames[1].data[0].y[i] = Math.cos(t * Math.PI);
+
+ // A circle:
+ frames[2].data[0].x[i] = Math.sin(t * Math.PI);
+ frames[2].data[0].y[i] = Math.cos(t * Math.PI);
+}
+
+Plotly.newPlot('myDiv', [{
+ x: frames[0].data[0].x,
+ y: frames[0].data[0].y,
+ line: {simplify: false},
+}], {
+ xaxis: {range: [-Math.PI, Math.PI]},
+ yaxis: {range: [-1.2, 1.2]},
+ updatemenus: [{
+ buttons: [
+ {method: 'animate', args: [['sine']], label: 'sine'},
+ {method: 'animate', args: [['cosine']], label: 'cosine'},
+ {method: 'animate', args: [['circle']], label: 'circle'}
+ ]
+ }]
+}).then(function() {
+ Plotly.addFrames('myDiv', frames);
+});
diff --git a/content/plotly_js/animations/animations/animations-frame-groups-and-animation-modes.html b/content/plotly_js/animations/animations/animations-frame-groups-and-animation-modes.html
new file mode 100644
index 00000000000..2297f29b98d
--- /dev/null
+++ b/content/plotly_js/animations/animations/animations-frame-groups-and-animation-modes.html
@@ -0,0 +1,94 @@
+---
+name: Frame Groups and Animation Modes
+plot_url: https://codepen.io/plotly/embed/rrZRmA/?height=500&theme-id=15263&default-tab=result
+language: plotly_js
+suite: animations
+order: 7
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ The following example combines many of these concepts to draw a glass filling with water.
+
+ The first row of buttons animates a different set of predefined frames by changing the second argument of `Plotly.animate`. Passing `null` or `undefined` animates all defined frames in sequence, while passing an array of strings (here, the frames in reverse) animates a specific sequence of frames. By passing a plain string (here, `lower` or `upper`), it filters the animated frames to those with a `group` property equal to that name. The stop button is accomplished by interrupting the current animation with an empty list of frames, therefore simply stopping the animation at the end of the current frame.
+
+ The second row of buttons animates all frames with different animation modes. The `mode` option defines whether an animation either interrupts or follows the current animation. `immediate` mode discards all queued frames and begins a new sequence immediately. The `next` mode is very similar but doesn't begin the new animation until the *end* of the current frame. Finally, `afterall` queues the new frames so that the new animation begins only after all previous animations have completed.
+---
+var i, j, t, x, y, name;
+var frames = [];
+var nFrames = 10;
+var n = 80;
+var reverseFrames = [];
+
+for (i = 0; i < nFrames; i++) {
+ var fill = 0.1 + 0.9 * i / (nFrames - 1);
+ x = [-1];
+ y = [0];
+
+ // A wave across the top:
+ for (j = 0; j < n; j++) {
+ t = j / (n - 1);
+ x.push(-1 - fill + (2 + 2 * fill) * t);
+ y.push(fill + 0.05 * Math.sin(t * Math.PI * 2 * i));
+ }
+
+ // Close the loop to draw the water:
+ x.push(1, -1);
+ y.push(0, 0);
+
+ // Choose a name:
+ name = 'frame' + i;
+
+ // Store it in an array so we can animate in reverse order:
+ reverseFrames.unshift(name);
+
+ // Create the frame:
+ frames.push({
+ name: name,
+ data: [{x: x, y: y}],
+ group: i < nFrames / 2 ? 'lower' : 'upper'
+ })
+}
+
+Plotly.newPlot('myDiv', [{
+ // Set up the initial water:
+ x: frames[0].data[0].x,
+ y: frames[0].data[0].y,
+ mode: 'lines',
+ fill: 'toself',
+ showlegend: false,
+ line: {simplify: false}
+}, {
+ // Draw a glass:
+ x: [-1, 1, 2.1, -2.1, -1],
+ y: [0, 0, 1.1, 1.1, 0],
+ mode: 'lines',
+ fill: 'toself',
+ showlegend: false,
+ fillcolor: 'rgba(0, 0, 0, 0.1)',
+ line: {color: 'rgba(100,100,100,0.2)'}
+}], {
+ xaxis: {range: [-3, 3]},
+ yaxis: {range: [-0.1, 1.5]}
+}).then(function() {
+ // Add the frames so we can animate them:
+ Plotly.addFrames('myDiv', frames);
+});
+
+// Stop the animation by animating to an empty set of frames:
+function stopAnimation () {
+ Plotly.animate('myDiv', [], {mode: 'next'});
+}
+
+function startAnimation (groupOrFrames, mode) {
+ Plotly.animate('myDiv', groupOrFrames, {
+ transition: {
+ duration: 500,
+ easing: 'linear'
+ },
+ frame: {
+ duration: 500,
+ redraw: false,
+ },
+ mode: mode
+ });
+}
diff --git a/content/plotly_js/animations/animations/animations-gapminder.html b/content/plotly_js/animations/animations/animations-gapminder.html
new file mode 100644
index 00000000000..9248dd7b7bf
--- /dev/null
+++ b/content/plotly_js/animations/animations/animations-gapminder.html
@@ -0,0 +1,10 @@
+---
+name: Animating with a Slider
+language: plotly_js
+suite: animations
+order: 8
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ See [Adding Sliders to Animations](https://plotly.com/javascript/gapminder-example/).
+---
diff --git a/content/plotly_js/animations/animations/animations-object-constancy.html b/content/plotly_js/animations/animations/animations-object-constancy.html
new file mode 100644
index 00000000000..68aeb0c8797
--- /dev/null
+++ b/content/plotly_js/animations/animations/animations-object-constancy.html
@@ -0,0 +1,41 @@
+---
+name: Object Constancy
+plot_url: https://codepen.io/plotly/embed/LRNaWw/?height=500&theme-id=15263&default-tab=result
+language: plotly_js
+suite: animations
+order: 6
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ For scatter traces, you may wish to retain a marker's identity as it is updated. If you include an array of string ids with the trace, the marker identity will be retained. By shuffling the ids, the example below shuffles the markers each time the button is pressed.
+---
+function shuffleInPlace(array) {
+ for (var i = array.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = array[i];
+ array[i] = array[j];
+ array[j] = temp;
+ }
+}
+
+var ids = ['1', '2', '3', '4', '5', '6'];
+
+Plotly.newPlot('myDiv', [{
+ x: [1, 0.5, -0.5, -1, -0.5, 0.5],
+ y: [0, 0.866, 0.866, 0, -0.866, -0.866],
+ marker:{size:14,
+ color:['#631357', '#880E4F', '#AD1457',
+ '#F06292', '#F48FB1']},
+ ids: ids,
+ mode: 'markers'
+}], {
+ xaxis: {range: [-3, 3]},
+ yaxis: {range: [-2, 2]}
+});
+
+function animateShuffle() {
+ shuffleInPlace(ids);
+ Plotly.animate('myDiv', [{
+ data: [{ids: ids}]
+ }]);
+}
diff --git a/content/plotly_js/animations/animations/gapminder-with-frames.json b/content/plotly_js/animations/animations/gapminder-with-frames.json
new file mode 100644
index 00000000000..843dc88bad5
--- /dev/null
+++ b/content/plotly_js/animations/animations/gapminder-with-frames.json
@@ -0,0 +1,8705 @@
+{
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 8425333,
+ 120447,
+ 46886859,
+ 4693836,
+ 556263527.999989,
+ 2125900,
+ 372000000,
+ 82052000,
+ 17272000,
+ 5441766,
+ 1620914,
+ 86459025,
+ 607914,
+ 8865488,
+ 20947571,
+ 160000,
+ 1439529,
+ 6748378,
+ 800663,
+ 20092996,
+ 9182536,
+ 507833,
+ 41346560,
+ 22438691,
+ 4005677,
+ 1127000,
+ 7982342,
+ 3661549,
+ 8550362,
+ 21289402,
+ 26246839,
+ 1030585,
+ 4963829
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 28.801,
+ 50.939,
+ 37.484,
+ 39.417,
+ 44,
+ 60.96,
+ 37.373,
+ 37.468,
+ 44.869,
+ 45.32,
+ 65.39,
+ 63.03,
+ 43.158,
+ 50.056,
+ 47.453,
+ 55.565,
+ 55.928,
+ 48.463,
+ 42.244,
+ 36.319,
+ 36.157,
+ 37.578,
+ 43.436,
+ 47.752,
+ 39.875,
+ 60.396,
+ 57.593,
+ 45.883,
+ 58.5,
+ 50.848,
+ 40.412,
+ 43.16,
+ 32.548
+ ],
+ "y":[
+ 779.4453145,
+ 9867.084765,
+ 684.2441716,
+ 368.4692856,
+ 400.448610699994,
+ 3054.421209,
+ 546.5657493,
+ 749.6816546,
+ 3035.326002,
+ 4129.766056,
+ 4086.522128,
+ 3216.956347,
+ 1546.907807,
+ 1088.277758,
+ 1030.592226,
+ 108382.3529,
+ 4834.804067,
+ 1831.132894,
+ 786.5668575,
+ 331,
+ 545.8657229,
+ 1828.230307,
+ 684.5971438,
+ 1272.880995,
+ 6459.554823,
+ 2315.138227,
+ 1083.53203,
+ 1643.485354,
+ 1206.947913,
+ 757.7974177,
+ 605.0664917,
+ 1515.592329,
+ 781.7175761
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 1282697,
+ 6927772,
+ 8730405,
+ 2791000,
+ 7274900,
+ 3882229,
+ 9125183,
+ 4334000,
+ 4090500,
+ 42459667,
+ 69145952,
+ 7733250,
+ 9504000,
+ 147962,
+ 2952156,
+ 47666000,
+ 413834,
+ 10381988,
+ 3327728,
+ 25730551,
+ 8526050,
+ 16630000,
+ 6860147,
+ 3558137,
+ 1489518,
+ 28549870,
+ 7124673,
+ 4815000,
+ 22235677,
+ 50430000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 55.23,
+ 66.8,
+ 68,
+ 53.82,
+ 59.6,
+ 61.21,
+ 66.87,
+ 70.78,
+ 66.55,
+ 67.41,
+ 67.5,
+ 65.86,
+ 64.03,
+ 72.49,
+ 66.91,
+ 65.94,
+ 59.164,
+ 72.13,
+ 72.67,
+ 61.31,
+ 59.82,
+ 61.05,
+ 57.996,
+ 64.36,
+ 65.57,
+ 64.94,
+ 71.86,
+ 69.62,
+ 43.585,
+ 69.18
+ ],
+ "y":[
+ 1601.056136,
+ 6137.076492,
+ 8343.105127,
+ 973.5331948,
+ 2444.286648,
+ 3119.23652,
+ 6876.14025,
+ 9692.385245,
+ 6424.519071,
+ 7029.809327,
+ 7144.114393,
+ 3530.690067,
+ 5263.673816,
+ 7267.688428,
+ 5210.280328,
+ 4931.404155,
+ 2647.585601,
+ 8941.571858,
+ 10095.42172,
+ 4029.329699,
+ 3068.319867,
+ 3144.613186,
+ 3581.459448,
+ 5074.659104,
+ 4215.041741,
+ 3834.034742,
+ 8527.844662,
+ 14734.23275,
+ 1969.10098,
+ 9979.508487
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 9279525,
+ 4232095,
+ 1738315,
+ 442308,
+ 4469979,
+ 2445618,
+ 5009067,
+ 1291695,
+ 2682462,
+ 153936,
+ 14100005,
+ 854885,
+ 2977019,
+ 63149,
+ 22223309,
+ 216964,
+ 1438760,
+ 20860941,
+ 420702,
+ 284320,
+ 5581001,
+ 2664249,
+ 580653,
+ 6464046,
+ 748747,
+ 863308,
+ 1019729,
+ 4762912,
+ 2917802,
+ 3838168,
+ 1022556,
+ 516556,
+ 9939217,
+ 6446316,
+ 485831,
+ 3379468,
+ 33119096,
+ 257700,
+ 2534927,
+ 60011,
+ 2755589,
+ 2143249,
+ 2526994,
+ 14264935,
+ 8504667,
+ 290243,
+ 8322925,
+ 1219113,
+ 3647735,
+ 5824797,
+ 2672000,
+ 3080907
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 43.077,
+ 30.015,
+ 38.223,
+ 47.622,
+ 31.975,
+ 39.031,
+ 38.523,
+ 35.463,
+ 38.092,
+ 40.715,
+ 39.143,
+ 42.111,
+ 40.477,
+ 34.812,
+ 41.893,
+ 34.482,
+ 35.928,
+ 34.078,
+ 37.003,
+ 30,
+ 43.149,
+ 33.609,
+ 32.5,
+ 42.27,
+ 42.138,
+ 38.48,
+ 42.723,
+ 36.681,
+ 36.256,
+ 33.685,
+ 40.543,
+ 50.986,
+ 42.873,
+ 31.286,
+ 41.725,
+ 37.444,
+ 36.324,
+ 52.724,
+ 40,
+ 46.471,
+ 37.278,
+ 30.331,
+ 32.978,
+ 45.009,
+ 38.635,
+ 41.407,
+ 41.215,
+ 38.596,
+ 44.6,
+ 39.978,
+ 42.038,
+ 48.451
+ ],
+ "y":[
+ 2449.008185,
+ 3520.610273,
+ 1062.7522,
+ 851.2411407,
+ 543.2552413,
+ 339.2964587,
+ 1172.667655,
+ 1071.310713,
+ 1178.665927,
+ 1102.990936,
+ 780.5423257,
+ 2125.621418,
+ 1388.594732,
+ 2669.529475,
+ 1418.822445,
+ 375.6431231,
+ 328.9405571,
+ 362.1462796,
+ 4293.476475,
+ 485.2306591,
+ 911.2989371,
+ 510.1964923,
+ 299.850319,
+ 853.540919,
+ 298.8462121,
+ 575.5729961,
+ 2387.54806,
+ 1443.011715,
+ 369.1650802,
+ 452.3369807,
+ 743.1159097,
+ 1967.955707,
+ 1688.20357,
+ 468.5260381,
+ 2423.780443,
+ 761.879376,
+ 1077.281856,
+ 2718.885295,
+ 493.3238752,
+ 879.5835855,
+ 1450.356983,
+ 879.7877358,
+ 1135.749842,
+ 4725.295531,
+ 1615.991129,
+ 1148.376626,
+ 716.6500721,
+ 859.8086567,
+ 1468.475631,
+ 734.753484,
+ 1147.388831,
+ 406.8841148
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 17876956,
+ 2883315,
+ 56602560,
+ 14785584,
+ 6377619,
+ 12350771,
+ 926317,
+ 6007797,
+ 2491346,
+ 3548753,
+ 2042865,
+ 3146381,
+ 3201488,
+ 1517453,
+ 1426095,
+ 30144317,
+ 1165790,
+ 940080,
+ 1555876,
+ 8025700,
+ 2227000,
+ 662850,
+ 157553000,
+ 2252965,
+ 5439568
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 62.485,
+ 40.414,
+ 50.917,
+ 68.75,
+ 54.745,
+ 50.643,
+ 57.206,
+ 59.421,
+ 45.928,
+ 48.357,
+ 45.262,
+ 42.023,
+ 37.579,
+ 41.912,
+ 58.53,
+ 50.789,
+ 42.314,
+ 55.191,
+ 62.649,
+ 43.902,
+ 64.28,
+ 59.1,
+ 68.44,
+ 66.071,
+ 55.088
+ ],
+ "y":[
+ 5911.315053,
+ 2677.326347,
+ 2108.944355,
+ 11367.16112,
+ 3939.978789,
+ 2144.115096,
+ 2627.009471,
+ 5586.53878,
+ 1397.717137,
+ 3522.110717,
+ 3048.3029,
+ 2428.237769,
+ 1840.366939,
+ 2194.926204,
+ 2898.530881,
+ 3478.125529,
+ 3112.363948,
+ 2480.380334,
+ 1952.308701,
+ 3758.523437,
+ 3081.959785,
+ 3023.271928,
+ 13990.48208,
+ 5716.766744,
+ 7689.799761
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 8691212,
+ 1994794
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 69.12,
+ 69.39
+ ],
+ "y":[
+ 10039.59564,
+ 10556.57566
+ ]
+ }
+ ],
+ "frames":[
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 8425333,
+ 120447,
+ 46886859,
+ 4693836,
+ 556263527.999989,
+ 2125900,
+ 372000000,
+ 82052000,
+ 17272000,
+ 5441766,
+ 1620914,
+ 86459025,
+ 607914,
+ 8865488,
+ 20947571,
+ 160000,
+ 1439529,
+ 6748378,
+ 800663,
+ 20092996,
+ 9182536,
+ 507833,
+ 41346560,
+ 22438691,
+ 4005677,
+ 1127000,
+ 7982342,
+ 3661549,
+ 8550362,
+ 21289402,
+ 26246839,
+ 1030585,
+ 4963829
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 28.801,
+ 50.939,
+ 37.484,
+ 39.417,
+ 44,
+ 60.96,
+ 37.373,
+ 37.468,
+ 44.869,
+ 45.32,
+ 65.39,
+ 63.03,
+ 43.158,
+ 50.056,
+ 47.453,
+ 55.565,
+ 55.928,
+ 48.463,
+ 42.244,
+ 36.319,
+ 36.157,
+ 37.578,
+ 43.436,
+ 47.752,
+ 39.875,
+ 60.396,
+ 57.593,
+ 45.883,
+ 58.5,
+ 50.848,
+ 40.412,
+ 43.16,
+ 32.548
+ ],
+ "y":[
+ 779.4453145,
+ 9867.084765,
+ 684.2441716,
+ 368.4692856,
+ 400.448610699994,
+ 3054.421209,
+ 546.5657493,
+ 749.6816546,
+ 3035.326002,
+ 4129.766056,
+ 4086.522128,
+ 3216.956347,
+ 1546.907807,
+ 1088.277758,
+ 1030.592226,
+ 108382.3529,
+ 4834.804067,
+ 1831.132894,
+ 786.5668575,
+ 331,
+ 545.8657229,
+ 1828.230307,
+ 684.5971438,
+ 1272.880995,
+ 6459.554823,
+ 2315.138227,
+ 1083.53203,
+ 1643.485354,
+ 1206.947913,
+ 757.7974177,
+ 605.0664917,
+ 1515.592329,
+ 781.7175761
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 1282697,
+ 6927772,
+ 8730405,
+ 2791000,
+ 7274900,
+ 3882229,
+ 9125183,
+ 4334000,
+ 4090500,
+ 42459667,
+ 69145952,
+ 7733250,
+ 9504000,
+ 147962,
+ 2952156,
+ 47666000,
+ 413834,
+ 10381988,
+ 3327728,
+ 25730551,
+ 8526050,
+ 16630000,
+ 6860147,
+ 3558137,
+ 1489518,
+ 28549870,
+ 7124673,
+ 4815000,
+ 22235677,
+ 50430000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 55.23,
+ 66.8,
+ 68,
+ 53.82,
+ 59.6,
+ 61.21,
+ 66.87,
+ 70.78,
+ 66.55,
+ 67.41,
+ 67.5,
+ 65.86,
+ 64.03,
+ 72.49,
+ 66.91,
+ 65.94,
+ 59.164,
+ 72.13,
+ 72.67,
+ 61.31,
+ 59.82,
+ 61.05,
+ 57.996,
+ 64.36,
+ 65.57,
+ 64.94,
+ 71.86,
+ 69.62,
+ 43.585,
+ 69.18
+ ],
+ "y":[
+ 1601.056136,
+ 6137.076492,
+ 8343.105127,
+ 973.5331948,
+ 2444.286648,
+ 3119.23652,
+ 6876.14025,
+ 9692.385245,
+ 6424.519071,
+ 7029.809327,
+ 7144.114393,
+ 3530.690067,
+ 5263.673816,
+ 7267.688428,
+ 5210.280328,
+ 4931.404155,
+ 2647.585601,
+ 8941.571858,
+ 10095.42172,
+ 4029.329699,
+ 3068.319867,
+ 3144.613186,
+ 3581.459448,
+ 5074.659104,
+ 4215.041741,
+ 3834.034742,
+ 8527.844662,
+ 14734.23275,
+ 1969.10098,
+ 9979.508487
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 9279525,
+ 4232095,
+ 1738315,
+ 442308,
+ 4469979,
+ 2445618,
+ 5009067,
+ 1291695,
+ 2682462,
+ 153936,
+ 14100005,
+ 854885,
+ 2977019,
+ 63149,
+ 22223309,
+ 216964,
+ 1438760,
+ 20860941,
+ 420702,
+ 284320,
+ 5581001,
+ 2664249,
+ 580653,
+ 6464046,
+ 748747,
+ 863308,
+ 1019729,
+ 4762912,
+ 2917802,
+ 3838168,
+ 1022556,
+ 516556,
+ 9939217,
+ 6446316,
+ 485831,
+ 3379468,
+ 33119096,
+ 257700,
+ 2534927,
+ 60011,
+ 2755589,
+ 2143249,
+ 2526994,
+ 14264935,
+ 8504667,
+ 290243,
+ 8322925,
+ 1219113,
+ 3647735,
+ 5824797,
+ 2672000,
+ 3080907
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 43.077,
+ 30.015,
+ 38.223,
+ 47.622,
+ 31.975,
+ 39.031,
+ 38.523,
+ 35.463,
+ 38.092,
+ 40.715,
+ 39.143,
+ 42.111,
+ 40.477,
+ 34.812,
+ 41.893,
+ 34.482,
+ 35.928,
+ 34.078,
+ 37.003,
+ 30,
+ 43.149,
+ 33.609,
+ 32.5,
+ 42.27,
+ 42.138,
+ 38.48,
+ 42.723,
+ 36.681,
+ 36.256,
+ 33.685,
+ 40.543,
+ 50.986,
+ 42.873,
+ 31.286,
+ 41.725,
+ 37.444,
+ 36.324,
+ 52.724,
+ 40,
+ 46.471,
+ 37.278,
+ 30.331,
+ 32.978,
+ 45.009,
+ 38.635,
+ 41.407,
+ 41.215,
+ 38.596,
+ 44.6,
+ 39.978,
+ 42.038,
+ 48.451
+ ],
+ "y":[
+ 2449.008185,
+ 3520.610273,
+ 1062.7522,
+ 851.2411407,
+ 543.2552413,
+ 339.2964587,
+ 1172.667655,
+ 1071.310713,
+ 1178.665927,
+ 1102.990936,
+ 780.5423257,
+ 2125.621418,
+ 1388.594732,
+ 2669.529475,
+ 1418.822445,
+ 375.6431231,
+ 328.9405571,
+ 362.1462796,
+ 4293.476475,
+ 485.2306591,
+ 911.2989371,
+ 510.1964923,
+ 299.850319,
+ 853.540919,
+ 298.8462121,
+ 575.5729961,
+ 2387.54806,
+ 1443.011715,
+ 369.1650802,
+ 452.3369807,
+ 743.1159097,
+ 1967.955707,
+ 1688.20357,
+ 468.5260381,
+ 2423.780443,
+ 761.879376,
+ 1077.281856,
+ 2718.885295,
+ 493.3238752,
+ 879.5835855,
+ 1450.356983,
+ 879.7877358,
+ 1135.749842,
+ 4725.295531,
+ 1615.991129,
+ 1148.376626,
+ 716.6500721,
+ 859.8086567,
+ 1468.475631,
+ 734.753484,
+ 1147.388831,
+ 406.8841148
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 17876956,
+ 2883315,
+ 56602560,
+ 14785584,
+ 6377619,
+ 12350771,
+ 926317,
+ 6007797,
+ 2491346,
+ 3548753,
+ 2042865,
+ 3146381,
+ 3201488,
+ 1517453,
+ 1426095,
+ 30144317,
+ 1165790,
+ 940080,
+ 1555876,
+ 8025700,
+ 2227000,
+ 662850,
+ 157553000,
+ 2252965,
+ 5439568
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 62.485,
+ 40.414,
+ 50.917,
+ 68.75,
+ 54.745,
+ 50.643,
+ 57.206,
+ 59.421,
+ 45.928,
+ 48.357,
+ 45.262,
+ 42.023,
+ 37.579,
+ 41.912,
+ 58.53,
+ 50.789,
+ 42.314,
+ 55.191,
+ 62.649,
+ 43.902,
+ 64.28,
+ 59.1,
+ 68.44,
+ 66.071,
+ 55.088
+ ],
+ "y":[
+ 5911.315053,
+ 2677.326347,
+ 2108.944355,
+ 11367.16112,
+ 3939.978789,
+ 2144.115096,
+ 2627.009471,
+ 5586.53878,
+ 1397.717137,
+ 3522.110717,
+ 3048.3029,
+ 2428.237769,
+ 1840.366939,
+ 2194.926204,
+ 2898.530881,
+ 3478.125529,
+ 3112.363948,
+ 2480.380334,
+ 1952.308701,
+ 3758.523437,
+ 3081.959785,
+ 3023.271928,
+ 13990.48208,
+ 5716.766744,
+ 7689.799761
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 8691212,
+ 1994794
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 69.12,
+ 69.39
+ ],
+ "y":[
+ 10039.59564,
+ 10556.57566
+ ]
+ }
+ ],
+ "name":"1952"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 9240934,
+ 138655,
+ 51365468,
+ 5322536,
+ 637408000,
+ 2736300,
+ 409000000,
+ 90124000,
+ 19792000,
+ 6248643,
+ 1944401,
+ 91563009,
+ 746559,
+ 9411381,
+ 22611552,
+ 212846,
+ 1647412,
+ 7739235,
+ 882134,
+ 21731844,
+ 9682338,
+ 561977,
+ 46679944,
+ 26072194,
+ 4419650,
+ 1445929,
+ 9128546,
+ 4149908,
+ 10164215,
+ 25041917,
+ 28998543,
+ 1070439,
+ 5498090
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 30.332,
+ 53.832,
+ 39.348,
+ 41.366,
+ 50.54896,
+ 64.75,
+ 40.249,
+ 39.918,
+ 47.181,
+ 48.437,
+ 67.84,
+ 65.5,
+ 45.669,
+ 54.081,
+ 52.681,
+ 58.033,
+ 59.489,
+ 52.102,
+ 45.248,
+ 41.905,
+ 37.686,
+ 40.08,
+ 45.557,
+ 51.334,
+ 42.868,
+ 63.179,
+ 61.456,
+ 48.284,
+ 62.4,
+ 53.63,
+ 42.887,
+ 45.671,
+ 33.97
+ ],
+ "y":[
+ 820.8530296,
+ 11635.79945,
+ 661.6374577,
+ 434.0383364,
+ 575.9870009,
+ 3629.076457,
+ 590.061996,
+ 858.9002707,
+ 3290.257643,
+ 6229.333562,
+ 5385.278451,
+ 4317.694365,
+ 1886.080591,
+ 1571.134655,
+ 1487.593537,
+ 113523.1329,
+ 6089.786934,
+ 1810.066992,
+ 912.6626085,
+ 350,
+ 597.9363558,
+ 2242.746551,
+ 747.0835292,
+ 1547.944844,
+ 8157.591248,
+ 2843.104409,
+ 1072.546602,
+ 2117.234893,
+ 1507.86129,
+ 793.5774148,
+ 676.2854478,
+ 1827.067742,
+ 804.8304547
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 1476505,
+ 6965860,
+ 8989111,
+ 3076000,
+ 7651254,
+ 3991242,
+ 9513758,
+ 4487831,
+ 4324000,
+ 44310863,
+ 71019069,
+ 8096218,
+ 9839000,
+ 165110,
+ 2878220,
+ 49182000,
+ 442829,
+ 11026383,
+ 3491938,
+ 28235346,
+ 8817650,
+ 17829327,
+ 7271135,
+ 3844277,
+ 1533070,
+ 29841614,
+ 7363802,
+ 5126000,
+ 25670939,
+ 51430000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 59.28,
+ 67.48,
+ 69.24,
+ 58.45,
+ 66.61,
+ 64.77,
+ 69.03,
+ 71.81,
+ 67.49,
+ 68.93,
+ 69.1,
+ 67.86,
+ 66.41,
+ 73.47,
+ 68.9,
+ 67.81,
+ 61.448,
+ 72.99,
+ 73.44,
+ 65.77,
+ 61.51,
+ 64.1,
+ 61.685,
+ 67.45,
+ 67.85,
+ 66.66,
+ 72.49,
+ 70.56,
+ 48.079,
+ 70.42
+ ],
+ "y":[
+ 1942.284244,
+ 8842.59803,
+ 9714.960623,
+ 1353.989176,
+ 3008.670727,
+ 4338.231617,
+ 8256.343918,
+ 11099.65935,
+ 7545.415386,
+ 8662.834898,
+ 10187.82665,
+ 4916.299889,
+ 6040.180011,
+ 9244.001412,
+ 5599.077872,
+ 6248.656232,
+ 3682.259903,
+ 11276.19344,
+ 11653.97304,
+ 4734.253019,
+ 3774.571743,
+ 3943.370225,
+ 4981.090891,
+ 6093.26298,
+ 5862.276629,
+ 4564.80241,
+ 9911.878226,
+ 17909.48973,
+ 2218.754257,
+ 11283.17795
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 10270856,
+ 4561361,
+ 1925173,
+ 474639,
+ 4713416,
+ 2667518,
+ 5359923,
+ 1392284,
+ 2894855,
+ 170928,
+ 15577932,
+ 940458,
+ 3300000,
+ 71851,
+ 25009741,
+ 232922,
+ 1542611,
+ 22815614,
+ 434904,
+ 323150,
+ 6391288,
+ 2876726,
+ 601095,
+ 7454779,
+ 813338,
+ 975950,
+ 1201578,
+ 5181679,
+ 3221238,
+ 4241884,
+ 1076852,
+ 609816,
+ 11406350,
+ 7038035,
+ 548080,
+ 3692184,
+ 37173340,
+ 308700,
+ 2822082,
+ 61325,
+ 3054547,
+ 2295678,
+ 2780415,
+ 16151549,
+ 9753392,
+ 326741,
+ 9452826,
+ 1357445,
+ 3950849,
+ 6675501,
+ 3016000,
+ 3646340
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 45.685,
+ 31.999,
+ 40.358,
+ 49.618,
+ 34.906,
+ 40.533,
+ 40.428,
+ 37.464,
+ 39.881,
+ 42.46,
+ 40.652,
+ 45.053,
+ 42.469,
+ 37.328,
+ 44.444,
+ 35.983,
+ 38.047,
+ 36.667,
+ 38.999,
+ 32.065,
+ 44.779,
+ 34.558,
+ 33.489,
+ 44.686,
+ 45.047,
+ 39.486,
+ 45.289,
+ 38.865,
+ 37.207,
+ 35.307,
+ 42.338,
+ 58.089,
+ 45.423,
+ 33.779,
+ 45.226,
+ 38.598,
+ 37.802,
+ 55.09,
+ 41.5,
+ 48.945,
+ 39.329,
+ 31.57,
+ 34.977,
+ 47.985,
+ 39.624,
+ 43.424,
+ 42.974,
+ 41.208,
+ 47.1,
+ 42.571,
+ 44.077,
+ 50.469
+ ],
+ "y":[
+ 3013.976023,
+ 3827.940465,
+ 959.6010805,
+ 918.2325349,
+ 617.1834648,
+ 379.5646281,
+ 1313.048099,
+ 1190.844328,
+ 1308.495577,
+ 1211.148548,
+ 905.8602303,
+ 2315.056572,
+ 1500.895925,
+ 2864.969076,
+ 1458.915272,
+ 426.0964081,
+ 344.1618859,
+ 378.9041632,
+ 4976.198099,
+ 520.9267111,
+ 1043.561537,
+ 576.2670245,
+ 431.7904566,
+ 944.4383152,
+ 335.9971151,
+ 620.9699901,
+ 3448.284395,
+ 1589.20275,
+ 416.3698064,
+ 490.3821867,
+ 846.1202613,
+ 2034.037981,
+ 1642.002314,
+ 495.5868333,
+ 2621.448058,
+ 835.5234025,
+ 1100.592563,
+ 2769.451844,
+ 540.2893983,
+ 860.7369026,
+ 1567.653006,
+ 1004.484437,
+ 1258.147413,
+ 5487.104219,
+ 1770.337074,
+ 1244.708364,
+ 698.5356073,
+ 925.9083202,
+ 1395.232468,
+ 774.3710692,
+ 1311.956766,
+ 518.7642681
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 19610538,
+ 3211738,
+ 65551171,
+ 17010154,
+ 7048426,
+ 14485993,
+ 1112300,
+ 6640752,
+ 2923186,
+ 4058385,
+ 2355805,
+ 3640876,
+ 3507701,
+ 1770390,
+ 1535090,
+ 35015548,
+ 1358828,
+ 1063506,
+ 1770902,
+ 9146100,
+ 2260000,
+ 764900,
+ 171984000,
+ 2424959,
+ 6702668
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 64.399,
+ 41.89,
+ 53.285,
+ 69.96,
+ 56.074,
+ 55.118,
+ 60.026,
+ 62.325,
+ 49.828,
+ 51.356,
+ 48.57,
+ 44.142,
+ 40.696,
+ 44.665,
+ 62.61,
+ 55.19,
+ 45.432,
+ 59.201,
+ 63.196,
+ 46.263,
+ 68.54,
+ 61.8,
+ 69.49,
+ 67.044,
+ 57.907
+ ],
+ "y":[
+ 6856.856212,
+ 2127.686326,
+ 2487.365989,
+ 12489.95006,
+ 4315.622723,
+ 2323.805581,
+ 2990.010802,
+ 6092.174359,
+ 1544.402995,
+ 3780.546651,
+ 3421.523218,
+ 2617.155967,
+ 1726.887882,
+ 2220.487682,
+ 4756.525781,
+ 4131.546641,
+ 3457.415947,
+ 2961.800905,
+ 2046.154706,
+ 4245.256698,
+ 3907.156189,
+ 4100.3934,
+ 14847.12712,
+ 6150.772969,
+ 9802.466526
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 9712569,
+ 2229407
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 70.33,
+ 70.26
+ ],
+ "y":[
+ 10949.64959,
+ 12247.39532
+ ]
+ }
+ ],
+ "name":"1957"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 10267083,
+ 171863,
+ 56839289,
+ 6083619,
+ 665770000,
+ 3305200,
+ 454000000,
+ 99028000,
+ 22874000,
+ 7240260,
+ 2310904,
+ 95831757,
+ 933559,
+ 10917494,
+ 26420307,
+ 358266,
+ 1886848,
+ 8906385,
+ 1010280,
+ 23634436,
+ 10332057,
+ 628164,
+ 53100671,
+ 30325264,
+ 4943029,
+ 1750200,
+ 10421936,
+ 4834621,
+ 11918938,
+ 29263397,
+ 33796140,
+ 1133134,
+ 6120081
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 31.997,
+ 56.923,
+ 41.216,
+ 43.415,
+ 44.50136,
+ 67.65,
+ 43.605,
+ 42.518,
+ 49.325,
+ 51.457,
+ 69.39,
+ 68.73,
+ 48.126,
+ 56.656,
+ 55.292,
+ 60.47,
+ 62.094,
+ 55.737,
+ 48.251,
+ 45.108,
+ 39.393,
+ 43.165,
+ 47.67,
+ 54.757,
+ 45.914,
+ 65.798,
+ 62.192,
+ 50.305,
+ 65.2,
+ 56.061,
+ 45.363,
+ 48.127,
+ 35.18
+ ],
+ "y":[
+ 853.10071,
+ 12753.27514,
+ 686.3415538,
+ 496.9136476,
+ 487.6740183,
+ 4692.648272,
+ 658.3471509,
+ 849.2897701,
+ 4187.329802,
+ 8341.737815,
+ 7105.630706,
+ 6576.649461,
+ 2348.009158,
+ 1621.693598,
+ 1536.344387,
+ 95458.11176,
+ 5714.560611,
+ 2036.884944,
+ 1056.353958,
+ 388,
+ 652.3968593,
+ 2924.638113,
+ 803.3427418,
+ 1649.552153,
+ 11626.41975,
+ 3674.735572,
+ 1074.47196,
+ 2193.037133,
+ 1822.879028,
+ 1002.199172,
+ 772.0491602,
+ 2198.956312,
+ 825.6232006
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 1728137,
+ 7129864,
+ 9218400,
+ 3349000,
+ 8012946,
+ 4076557,
+ 9620282,
+ 4646899,
+ 4491443,
+ 47124000,
+ 73739117,
+ 8448233,
+ 10063000,
+ 182053,
+ 2830000,
+ 50843200,
+ 474528,
+ 11805689,
+ 3638919,
+ 30329617,
+ 9019800,
+ 18680721,
+ 7616060,
+ 4237384,
+ 1582962,
+ 31158061,
+ 7561588,
+ 5666000,
+ 29788695,
+ 53292000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 64.82,
+ 69.54,
+ 70.25,
+ 61.93,
+ 69.51,
+ 67.13,
+ 69.9,
+ 72.35,
+ 68.75,
+ 70.51,
+ 70.3,
+ 69.51,
+ 67.96,
+ 73.68,
+ 70.29,
+ 69.24,
+ 63.728,
+ 73.23,
+ 73.47,
+ 67.64,
+ 64.39,
+ 66.8,
+ 64.531,
+ 70.33,
+ 69.15,
+ 69.69,
+ 73.37,
+ 71.32,
+ 52.098,
+ 70.76
+ ],
+ "y":[
+ 2312.888958,
+ 10750.72111,
+ 10991.20676,
+ 1709.683679,
+ 4254.337839,
+ 5477.890018,
+ 10136.86713,
+ 13583.31351,
+ 9371.842561,
+ 10560.48553,
+ 12902.46291,
+ 6017.190733,
+ 7550.359877,
+ 10350.15906,
+ 6631.597314,
+ 8243.58234,
+ 4649.593785,
+ 12790.84956,
+ 13450.40151,
+ 5338.752143,
+ 4727.954889,
+ 4734.997586,
+ 6289.629157,
+ 7481.107598,
+ 7402.303395,
+ 5693.843879,
+ 12329.44192,
+ 20431.0927,
+ 2322.869908,
+ 12477.17707
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 11000948,
+ 4826015,
+ 2151895,
+ 512764,
+ 4919632,
+ 2961915,
+ 5793633,
+ 1523478,
+ 3150417,
+ 191689,
+ 17486434,
+ 1047924,
+ 3832408,
+ 89898,
+ 28173309,
+ 249220,
+ 1666618,
+ 25145372,
+ 455661,
+ 374020,
+ 7355248,
+ 3140003,
+ 627820,
+ 8678557,
+ 893143,
+ 1112796,
+ 1441863,
+ 5703324,
+ 3628608,
+ 4690372,
+ 1146757,
+ 701016,
+ 13056604,
+ 7788944,
+ 621392,
+ 4076008,
+ 41871351,
+ 358900,
+ 3051242,
+ 65345,
+ 3430243,
+ 2467895,
+ 3080153,
+ 18356657,
+ 11183227,
+ 370006,
+ 10863958,
+ 1528098,
+ 4286552,
+ 7688797,
+ 3421000,
+ 4277736
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 48.303,
+ 34,
+ 42.618,
+ 51.52,
+ 37.814,
+ 42.045,
+ 42.643,
+ 39.475,
+ 41.716,
+ 44.467,
+ 42.122,
+ 48.435,
+ 44.93,
+ 39.693,
+ 46.992,
+ 37.485,
+ 40.158,
+ 40.059,
+ 40.489,
+ 33.896,
+ 46.452,
+ 35.753,
+ 34.488,
+ 47.949,
+ 47.747,
+ 40.502,
+ 47.808,
+ 40.848,
+ 38.41,
+ 36.936,
+ 44.248,
+ 60.246,
+ 47.924,
+ 36.161,
+ 48.386,
+ 39.487,
+ 39.36,
+ 57.666,
+ 43,
+ 51.893,
+ 41.454,
+ 32.767,
+ 36.981,
+ 49.951,
+ 40.87,
+ 44.992,
+ 44.246,
+ 43.922,
+ 49.579,
+ 45.344,
+ 46.023,
+ 52.358
+ ],
+ "y":[
+ 2550.81688,
+ 4269.276742,
+ 949.4990641,
+ 983.6539764,
+ 722.5120206,
+ 355.2032273,
+ 1399.607441,
+ 1193.068753,
+ 1389.817618,
+ 1406.648278,
+ 896.3146335,
+ 2464.783157,
+ 1728.869428,
+ 3020.989263,
+ 1693.335853,
+ 582.8419714,
+ 380.9958433,
+ 419.4564161,
+ 6631.459222,
+ 599.650276,
+ 1190.041118,
+ 686.3736739,
+ 522.0343725,
+ 896.9663732,
+ 411.8006266,
+ 634.1951625,
+ 6757.030816,
+ 1643.38711,
+ 427.9010856,
+ 496.1743428,
+ 1055.896036,
+ 2529.067487,
+ 1566.353493,
+ 556.6863539,
+ 3173.215595,
+ 997.7661127,
+ 1150.927478,
+ 3173.72334,
+ 597.4730727,
+ 1071.551119,
+ 1654.988723,
+ 1116.639877,
+ 1369.488336,
+ 5768.729717,
+ 1959.593767,
+ 1856.182125,
+ 722.0038073,
+ 1067.53481,
+ 1660.30321,
+ 767.2717398,
+ 1452.725766,
+ 527.2721818
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 21283783,
+ 3593918,
+ 76039390,
+ 18985849,
+ 7961258,
+ 17009885,
+ 1345187,
+ 7254373,
+ 3453434,
+ 4681707,
+ 2747687,
+ 4208858,
+ 3880130,
+ 2090162,
+ 1665128,
+ 41121485,
+ 1590597,
+ 1215725,
+ 2009813,
+ 10516500,
+ 2448046,
+ 887498,
+ 186538000,
+ 2598466,
+ 8143375
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 65.142,
+ 43.428,
+ 55.665,
+ 71.3,
+ 57.924,
+ 57.863,
+ 62.842,
+ 65.246,
+ 53.459,
+ 54.64,
+ 52.307,
+ 46.954,
+ 43.59,
+ 48.041,
+ 65.61,
+ 58.299,
+ 48.632,
+ 61.817,
+ 64.361,
+ 49.096,
+ 69.62,
+ 64.9,
+ 70.21,
+ 68.253,
+ 60.77
+ ],
+ "y":[
+ 7133.166023,
+ 2180.972546,
+ 3336.585802,
+ 13462.48555,
+ 4519.094331,
+ 2492.351109,
+ 3460.937025,
+ 5180.75591,
+ 1662.137359,
+ 4086.114078,
+ 3776.803627,
+ 2750.364446,
+ 1796.589032,
+ 2291.156835,
+ 5246.107524,
+ 4581.609385,
+ 3634.364406,
+ 3536.540301,
+ 2148.027146,
+ 4957.037982,
+ 5108.34463,
+ 4997.523971,
+ 16173.14586,
+ 5603.357717,
+ 8422.974165
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 10794968,
+ 2488550
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 70.93,
+ 71.24
+ ],
+ "y":[
+ 12217.22686,
+ 13175.678
+ ]
+ }
+ ],
+ "name":"1962"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 11537966,
+ 202182,
+ 62821884,
+ 6960067,
+ 754550000,
+ 3722800,
+ 506000000,
+ 109343000,
+ 26538000,
+ 8519282,
+ 2693585,
+ 100825279,
+ 1255058,
+ 12617009,
+ 30131000,
+ 575003,
+ 2186894,
+ 10154878,
+ 1149500,
+ 25870271,
+ 11261690,
+ 714775,
+ 60641899,
+ 35356600,
+ 5618198,
+ 1977600,
+ 11737396,
+ 5680812,
+ 13648692,
+ 34024249,
+ 39463910,
+ 1142636,
+ 6740785
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 34.02,
+ 59.923,
+ 43.453,
+ 45.415,
+ 58.38112,
+ 70,
+ 47.193,
+ 45.964,
+ 52.469,
+ 54.459,
+ 70.75,
+ 71.43,
+ 51.629,
+ 59.942,
+ 57.716,
+ 64.624,
+ 63.87,
+ 59.371,
+ 51.253,
+ 49.379,
+ 41.472,
+ 46.988,
+ 49.8,
+ 56.393,
+ 49.901,
+ 67.946,
+ 64.266,
+ 53.655,
+ 67.5,
+ 58.285,
+ 47.838,
+ 51.631,
+ 36.984
+ ],
+ "y":[
+ 836.1971382,
+ 14804.6727,
+ 721.1860862,
+ 523.4323142,
+ 612.7056934,
+ 6197.962814,
+ 700.7706107,
+ 762.4317721,
+ 5906.731805,
+ 8931.459811,
+ 8393.741404,
+ 9847.788607,
+ 2741.796252,
+ 2143.540609,
+ 2029.228142,
+ 80894.88326,
+ 6006.983042,
+ 2277.742396,
+ 1226.04113,
+ 349,
+ 676.4422254,
+ 4720.942687,
+ 942.4082588,
+ 1814.12743,
+ 16903.04886,
+ 4977.41854,
+ 1135.514326,
+ 1881.923632,
+ 2643.858681,
+ 1295.46066,
+ 637.1232887,
+ 2649.715007,
+ 862.4421463
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 1984060,
+ 7376998,
+ 9556500,
+ 3585000,
+ 8310226,
+ 4174366,
+ 9835109,
+ 4838800,
+ 4605744,
+ 49569000,
+ 76368453,
+ 8716441,
+ 10223422,
+ 198676,
+ 2900100,
+ 52667100,
+ 501035,
+ 12596822,
+ 3786019,
+ 31785378,
+ 9103000,
+ 19284814,
+ 7971222,
+ 4442238,
+ 1646912,
+ 32850275,
+ 7867931,
+ 6063000,
+ 33411317,
+ 54959000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 66.22,
+ 70.14,
+ 70.94,
+ 64.79,
+ 70.42,
+ 68.5,
+ 70.38,
+ 72.96,
+ 69.83,
+ 71.55,
+ 70.8,
+ 71,
+ 69.5,
+ 73.73,
+ 71.08,
+ 71.06,
+ 67.178,
+ 73.82,
+ 74.08,
+ 69.61,
+ 66.6,
+ 66.8,
+ 66.914,
+ 70.98,
+ 69.18,
+ 71.44,
+ 74.16,
+ 72.77,
+ 54.336,
+ 71.36
+ ],
+ "y":[
+ 2760.196931,
+ 12834.6024,
+ 13149.04119,
+ 2172.352423,
+ 5577.0028,
+ 6960.297861,
+ 11399.44489,
+ 15937.21123,
+ 10921.63626,
+ 12999.91766,
+ 14745.62561,
+ 8513.097016,
+ 9326.64467,
+ 13319.89568,
+ 7655.568963,
+ 10022.40131,
+ 5907.850937,
+ 15363.25136,
+ 16361.87647,
+ 6557.152776,
+ 6361.517993,
+ 6470.866545,
+ 7991.707066,
+ 8412.902397,
+ 9405.489397,
+ 7993.512294,
+ 15258.29697,
+ 22966.14432,
+ 2826.356387,
+ 14142.85089
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 12760499,
+ 5247469,
+ 2427334,
+ 553541,
+ 5127935,
+ 3330989,
+ 6335506,
+ 1733638,
+ 3495967,
+ 217378,
+ 19941073,
+ 1179760,
+ 4744870,
+ 127617,
+ 31681188,
+ 259864,
+ 1820319,
+ 27860297,
+ 489004,
+ 439593,
+ 8490213,
+ 3451418,
+ 601287,
+ 10191512,
+ 996380,
+ 1279406,
+ 1759224,
+ 6334556,
+ 4147252,
+ 5212416,
+ 1230542,
+ 789309,
+ 14770296,
+ 8680909,
+ 706640,
+ 4534062,
+ 47287752,
+ 414024,
+ 3451079,
+ 70787,
+ 3965841,
+ 2662190,
+ 3428839,
+ 20997321,
+ 12716129,
+ 420690,
+ 12607312,
+ 1735550,
+ 4786986,
+ 8900294,
+ 3900000,
+ 4995432
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 51.407,
+ 35.985,
+ 44.885,
+ 53.298,
+ 40.697,
+ 43.548,
+ 44.799,
+ 41.478,
+ 43.601,
+ 46.472,
+ 44.056,
+ 52.04,
+ 47.35,
+ 42.074,
+ 49.293,
+ 38.987,
+ 42.189,
+ 42.115,
+ 44.598,
+ 35.857,
+ 48.072,
+ 37.197,
+ 35.492,
+ 50.654,
+ 48.492,
+ 41.536,
+ 50.227,
+ 42.881,
+ 39.487,
+ 38.487,
+ 46.289,
+ 61.557,
+ 50.335,
+ 38.113,
+ 51.159,
+ 40.118,
+ 41.04,
+ 60.542,
+ 44.1,
+ 54.425,
+ 43.563,
+ 34.113,
+ 38.977,
+ 51.927,
+ 42.858,
+ 46.633,
+ 45.757,
+ 46.769,
+ 52.053,
+ 48.051,
+ 47.768,
+ 53.995
+ ],
+ "y":[
+ 3246.991771,
+ 5522.776375,
+ 1035.831411,
+ 1214.709294,
+ 794.8265597,
+ 412.9775136,
+ 1508.453148,
+ 1136.056615,
+ 1196.810565,
+ 1876.029643,
+ 861.5932424,
+ 2677.939642,
+ 2052.050473,
+ 3020.050513,
+ 1814.880728,
+ 915.5960025,
+ 468.7949699,
+ 516.1186438,
+ 8358.761987,
+ 734.7829124,
+ 1125.69716,
+ 708.7595409,
+ 715.5806402,
+ 1056.736457,
+ 498.6390265,
+ 713.6036483,
+ 18772.75169,
+ 1634.047282,
+ 495.5147806,
+ 545.0098873,
+ 1421.145193,
+ 2475.387562,
+ 1711.04477,
+ 566.6691539,
+ 3793.694753,
+ 1054.384891,
+ 1014.514104,
+ 4021.175739,
+ 510.9637142,
+ 1384.840593,
+ 1612.404632,
+ 1206.043465,
+ 1284.73318,
+ 7114.477971,
+ 1687.997641,
+ 2613.101665,
+ 848.2186575,
+ 1477.59676,
+ 1932.360167,
+ 908.9185217,
+ 1777.077318,
+ 569.7950712
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 22934225,
+ 4040665,
+ 88049823,
+ 20819767,
+ 8858908,
+ 19764027,
+ 1588717,
+ 8139332,
+ 4049146,
+ 5432424,
+ 3232927,
+ 4690773,
+ 4318137,
+ 2500689,
+ 1861096,
+ 47995559,
+ 1865490,
+ 1405486,
+ 2287985,
+ 12132200,
+ 2648961,
+ 960155,
+ 198712000,
+ 2748579,
+ 9709552
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 65.634,
+ 45.032,
+ 57.632,
+ 72.13,
+ 60.523,
+ 59.963,
+ 65.424,
+ 68.29,
+ 56.751,
+ 56.678,
+ 55.855,
+ 50.016,
+ 46.243,
+ 50.924,
+ 67.51,
+ 60.11,
+ 51.884,
+ 64.071,
+ 64.951,
+ 51.445,
+ 71.1,
+ 65.4,
+ 70.76,
+ 68.468,
+ 63.479
+ ],
+ "y":[
+ 8052.953021,
+ 2586.886053,
+ 3429.864357,
+ 16076.58803,
+ 5106.654313,
+ 2678.729839,
+ 4161.727834,
+ 5690.268015,
+ 1653.723003,
+ 4579.074215,
+ 4358.595393,
+ 3242.531147,
+ 1452.057666,
+ 2538.269358,
+ 6124.703451,
+ 5754.733883,
+ 4643.393534,
+ 4421.009084,
+ 2299.376311,
+ 5788.09333,
+ 6929.277714,
+ 5621.368472,
+ 19530.36557,
+ 5444.61962,
+ 9541.474188
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 11872264,
+ 2728150
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 71.1,
+ 71.52
+ ],
+ "y":[
+ 14526.12465,
+ 14463.91893
+ ]
+ }
+ ],
+ "name":"1967"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 13079460,
+ 230800,
+ 70759295,
+ 7450606,
+ 862030000,
+ 4115700,
+ 567000000,
+ 121282000,
+ 30614000,
+ 10061506,
+ 3095893,
+ 107188273,
+ 1613551,
+ 14781241,
+ 33505000,
+ 841934,
+ 2680018,
+ 11441462,
+ 1320500,
+ 28466390,
+ 12412593,
+ 829050,
+ 69325921,
+ 40850141,
+ 6472756,
+ 2152400,
+ 13016733,
+ 6701172,
+ 15226039,
+ 39276153,
+ 44655014,
+ 1089572,
+ 7407075
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 36.088,
+ 63.3,
+ 45.252,
+ 40.317,
+ 63.11888,
+ 72,
+ 50.651,
+ 49.203,
+ 55.234,
+ 56.95,
+ 71.63,
+ 73.42,
+ 56.528,
+ 63.983,
+ 62.612,
+ 67.712,
+ 65.421,
+ 63.01,
+ 53.754,
+ 53.07,
+ 43.971,
+ 52.143,
+ 51.929,
+ 58.065,
+ 53.886,
+ 69.521,
+ 65.042,
+ 57.296,
+ 69.39,
+ 60.405,
+ 50.254,
+ 56.532,
+ 39.848
+ ],
+ "y":[
+ 739.9811058,
+ 18268.65839,
+ 630.2336265,
+ 421.6240257,
+ 676.9000921,
+ 8315.928145,
+ 724.032527,
+ 1111.107907,
+ 9613.818607,
+ 9576.037596,
+ 12786.93223,
+ 14778.78636,
+ 2110.856309,
+ 3701.621503,
+ 3030.87665,
+ 109347.867,
+ 7486.384341,
+ 2849.09478,
+ 1421.741975,
+ 357,
+ 674.7881296,
+ 10618.03855,
+ 1049.938981,
+ 1989.37407,
+ 24837.42865,
+ 8597.756202,
+ 1213.39553,
+ 2571.423014,
+ 4062.523897,
+ 1524.358936,
+ 699.5016441,
+ 3133.409277,
+ 1265.047031
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 2263554,
+ 7544201,
+ 9709100,
+ 3819000,
+ 8576200,
+ 4225310,
+ 9862158,
+ 4991596,
+ 4639657,
+ 51732000,
+ 78717088,
+ 8888628,
+ 10394091,
+ 209275,
+ 3024400,
+ 54365564,
+ 527678,
+ 13329874,
+ 3933004,
+ 33039545,
+ 8970450,
+ 20662648,
+ 8313288,
+ 4593433,
+ 1694510,
+ 34513161,
+ 8122293,
+ 6401400,
+ 37492953,
+ 56079000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 67.69,
+ 70.63,
+ 71.44,
+ 67.45,
+ 70.9,
+ 69.61,
+ 70.29,
+ 73.47,
+ 70.87,
+ 72.38,
+ 71,
+ 72.34,
+ 69.76,
+ 74.46,
+ 71.28,
+ 72.19,
+ 70.636,
+ 73.75,
+ 74.34,
+ 70.85,
+ 69.26,
+ 69.21,
+ 68.7,
+ 70.35,
+ 69.82,
+ 73.06,
+ 74.72,
+ 73.78,
+ 57.005,
+ 72.01
+ ],
+ "y":[
+ 3313.422188,
+ 16661.6256,
+ 16672.14356,
+ 2860.16975,
+ 6597.494398,
+ 9164.090127,
+ 13108.4536,
+ 18866.20721,
+ 14358.8759,
+ 16107.19171,
+ 18016.18027,
+ 12724.82957,
+ 10168.65611,
+ 15798.06362,
+ 9530.772896,
+ 12269.27378,
+ 7778.414017,
+ 18794.74567,
+ 18965.05551,
+ 8006.506993,
+ 9022.247417,
+ 8011.414402,
+ 10522.06749,
+ 9674.167626,
+ 12383.4862,
+ 10638.75131,
+ 17832.02464,
+ 27195.11304,
+ 3450.69638,
+ 15895.11641
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 14760787,
+ 5894858,
+ 2761407,
+ 619351,
+ 5433886,
+ 3529983,
+ 7021028,
+ 1927260,
+ 3899068,
+ 250027,
+ 23007669,
+ 1340458,
+ 6071696,
+ 178848,
+ 34807417,
+ 277603,
+ 2260187,
+ 30770372,
+ 537977,
+ 517101,
+ 9354120,
+ 3811387,
+ 625361,
+ 12044785,
+ 1116779,
+ 1482628,
+ 2183877,
+ 7082430,
+ 4730997,
+ 5828158,
+ 1332786,
+ 851334,
+ 16660670,
+ 9809596,
+ 821782,
+ 5060262,
+ 53740085,
+ 461633,
+ 3992121,
+ 76595,
+ 4588696,
+ 2879013,
+ 3840161,
+ 23935810,
+ 14597019,
+ 480105,
+ 14706593,
+ 2056351,
+ 5303507,
+ 10190285,
+ 4506497,
+ 5861135
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 54.518,
+ 37.928,
+ 47.014,
+ 56.024,
+ 43.591,
+ 44.057,
+ 47.049,
+ 43.457,
+ 45.569,
+ 48.944,
+ 45.989,
+ 54.907,
+ 49.801,
+ 44.366,
+ 51.137,
+ 40.516,
+ 44.142,
+ 43.515,
+ 48.69,
+ 38.308,
+ 49.875,
+ 38.842,
+ 36.486,
+ 53.559,
+ 49.767,
+ 42.614,
+ 52.773,
+ 44.851,
+ 41.766,
+ 39.977,
+ 48.437,
+ 62.944,
+ 52.862,
+ 40.328,
+ 53.867,
+ 40.546,
+ 42.821,
+ 64.274,
+ 44.6,
+ 56.48,
+ 45.815,
+ 35.4,
+ 40.973,
+ 53.696,
+ 45.083,
+ 49.552,
+ 47.62,
+ 49.759,
+ 55.602,
+ 51.016,
+ 50.107,
+ 55.635
+ ],
+ "y":[
+ 4182.663766,
+ 5473.288005,
+ 1085.796879,
+ 2263.611114,
+ 854.7359763,
+ 464.0995039,
+ 1684.146528,
+ 1070.013275,
+ 1104.103987,
+ 1937.577675,
+ 904.8960685,
+ 3213.152683,
+ 2378.201111,
+ 3694.212352,
+ 2024.008147,
+ 672.4122571,
+ 514.3242082,
+ 566.2439442,
+ 11401.94841,
+ 756.0868363,
+ 1178.223708,
+ 741.6662307,
+ 820.2245876,
+ 1222.359968,
+ 496.5815922,
+ 803.0054535,
+ 21011.49721,
+ 1748.562982,
+ 584.6219709,
+ 581.3688761,
+ 1586.851781,
+ 2575.484158,
+ 1930.194975,
+ 724.9178037,
+ 3746.080948,
+ 954.2092363,
+ 1698.388838,
+ 5047.658563,
+ 590.5806638,
+ 1532.985254,
+ 1597.712056,
+ 1353.759762,
+ 1254.576127,
+ 7765.962636,
+ 1659.652775,
+ 3364.836625,
+ 915.9850592,
+ 1649.660188,
+ 2753.285994,
+ 950.735869,
+ 1773.498265,
+ 799.3621758
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 24779799,
+ 4565872,
+ 100840058,
+ 22284500,
+ 9717524,
+ 22542890,
+ 1834796,
+ 8831348,
+ 4671329,
+ 6298651,
+ 3790903,
+ 5149581,
+ 4698301,
+ 2965146,
+ 1997616,
+ 55984294,
+ 2182908,
+ 1616384,
+ 2614104,
+ 13954700,
+ 2847132,
+ 975199,
+ 209896000,
+ 2829526,
+ 11515649
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 67.065,
+ 46.714,
+ 59.504,
+ 72.88,
+ 63.441,
+ 61.623,
+ 67.849,
+ 70.723,
+ 59.631,
+ 58.796,
+ 58.207,
+ 53.738,
+ 48.042,
+ 53.884,
+ 69,
+ 62.361,
+ 55.151,
+ 66.216,
+ 65.815,
+ 55.448,
+ 72.16,
+ 65.9,
+ 71.34,
+ 68.673,
+ 65.712
+ ],
+ "y":[
+ 9443.038526,
+ 2980.331339,
+ 4985.711467,
+ 18970.57086,
+ 5494.024437,
+ 3264.660041,
+ 5118.146939,
+ 5305.445256,
+ 2189.874499,
+ 5280.99471,
+ 4520.246008,
+ 4031.408271,
+ 1654.456946,
+ 2529.842345,
+ 7433.889293,
+ 6809.40669,
+ 4688.593267,
+ 5364.249663,
+ 2523.337977,
+ 5937.827283,
+ 9123.041742,
+ 6619.551419,
+ 21806.03594,
+ 5703.408898,
+ 10505.25966
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 13177000,
+ 2929100
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 71.93,
+ 71.89
+ ],
+ "y":[
+ 16788.62948,
+ 16046.03728
+ ]
+ }
+ ],
+ "name":"1972"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 14880372,
+ 297410,
+ 80428306,
+ 6978607,
+ 943455000,
+ 4583700,
+ 634000000,
+ 136725000,
+ 35480679,
+ 11882916,
+ 3495918,
+ 113872473,
+ 1937652,
+ 16325320,
+ 36436000,
+ 1140357,
+ 3115787,
+ 12845381,
+ 1528000,
+ 31528087,
+ 13933198,
+ 1004533,
+ 78152686,
+ 46850962,
+ 8128505,
+ 2325300,
+ 14116836,
+ 7932503,
+ 16785196,
+ 44148285,
+ 50533506,
+ 1261091,
+ 8403990
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 38.438,
+ 65.593,
+ 46.923,
+ 31.22,
+ 63.96736,
+ 73.6,
+ 54.208,
+ 52.702,
+ 57.702,
+ 60.413,
+ 73.06,
+ 75.38,
+ 61.134,
+ 67.159,
+ 64.766,
+ 69.343,
+ 66.099,
+ 65.256,
+ 55.491,
+ 56.059,
+ 46.748,
+ 57.367,
+ 54.043,
+ 60.06,
+ 58.69,
+ 70.795,
+ 65.949,
+ 61.195,
+ 70.59,
+ 62.494,
+ 55.764,
+ 60.765,
+ 44.175
+ ],
+ "y":[
+ 786.11336,
+ 19340.10196,
+ 659.8772322,
+ 524.9721832,
+ 741.2374699,
+ 11186.14125,
+ 813.337323,
+ 1382.702056,
+ 11888.59508,
+ 14688.23507,
+ 13306.61921,
+ 16610.37701,
+ 2852.351568,
+ 4106.301249,
+ 4657.22102,
+ 59265.47714,
+ 8659.696836,
+ 3827.921571,
+ 1647.511665,
+ 371,
+ 694.1124398,
+ 11848.34392,
+ 1175.921193,
+ 2373.204287,
+ 34167.7626,
+ 11210.08948,
+ 1348.775651,
+ 3195.484582,
+ 5596.519826,
+ 1961.224635,
+ 713.5371196,
+ 3682.831494,
+ 1829.765177
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 2509048,
+ 7568430,
+ 9821800,
+ 4086000,
+ 8797022,
+ 4318673,
+ 10161915,
+ 5088419,
+ 4738902,
+ 53165019,
+ 78160773,
+ 9308479,
+ 10637171,
+ 221823,
+ 3271900,
+ 56059245,
+ 560073,
+ 13852989,
+ 4043205,
+ 34621254,
+ 9662600,
+ 21658597,
+ 8686367,
+ 4827803,
+ 1746919,
+ 36439000,
+ 8251648,
+ 6316424,
+ 42404033,
+ 56179000
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 68.93,
+ 72.17,
+ 72.8,
+ 69.86,
+ 70.81,
+ 70.64,
+ 70.71,
+ 74.69,
+ 72.52,
+ 73.83,
+ 72.5,
+ 73.68,
+ 69.95,
+ 76.11,
+ 72.03,
+ 73.48,
+ 73.066,
+ 75.24,
+ 75.37,
+ 70.67,
+ 70.41,
+ 69.46,
+ 70.3,
+ 70.45,
+ 70.97,
+ 74.39,
+ 75.44,
+ 75.39,
+ 59.507,
+ 72.76
+ ],
+ "y":[
+ 3533.00391,
+ 19749.4223,
+ 19117.97448,
+ 3528.481305,
+ 7612.240438,
+ 11305.38517,
+ 14800.16062,
+ 20422.9015,
+ 15605.42283,
+ 18292.63514,
+ 20512.92123,
+ 14195.52428,
+ 11674.83737,
+ 19654.96247,
+ 11150.98113,
+ 14255.98475,
+ 9595.929905,
+ 21209.0592,
+ 23311.34939,
+ 9508.141454,
+ 10172.48572,
+ 9356.39724,
+ 12980.66956,
+ 10922.66404,
+ 15277.03017,
+ 13236.92117,
+ 18855.72521,
+ 26982.29052,
+ 4269.122326,
+ 17428.74846
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 17152804,
+ 6162675,
+ 3168267,
+ 781472,
+ 5889574,
+ 3834415,
+ 7959865,
+ 2167533,
+ 4388260,
+ 304739,
+ 26480870,
+ 1536769,
+ 7459574,
+ 228694,
+ 38783863,
+ 192675,
+ 2512642,
+ 34617799,
+ 706367,
+ 608274,
+ 10538093,
+ 4227026,
+ 745228,
+ 14500404,
+ 1251524,
+ 1703617,
+ 2721783,
+ 8007166,
+ 5637246,
+ 6491649,
+ 1456688,
+ 913025,
+ 18396941,
+ 11127868,
+ 977026,
+ 5682086,
+ 62209173,
+ 492095,
+ 4657072,
+ 86796,
+ 5260855,
+ 3140897,
+ 4353666,
+ 27129932,
+ 17104986,
+ 551425,
+ 17129565,
+ 2308582,
+ 6005061,
+ 11457758,
+ 5216550,
+ 6642107
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 58.014,
+ 39.483,
+ 49.19,
+ 59.319,
+ 46.137,
+ 45.91,
+ 49.355,
+ 46.775,
+ 47.383,
+ 50.939,
+ 47.804,
+ 55.625,
+ 52.374,
+ 46.519,
+ 53.319,
+ 42.024,
+ 44.535,
+ 44.51,
+ 52.79,
+ 41.842,
+ 51.756,
+ 40.762,
+ 37.465,
+ 56.155,
+ 52.208,
+ 43.764,
+ 57.442,
+ 46.881,
+ 43.767,
+ 41.714,
+ 50.852,
+ 64.93,
+ 55.73,
+ 42.495,
+ 56.437,
+ 41.291,
+ 44.514,
+ 67.064,
+ 45,
+ 58.55,
+ 48.879,
+ 36.788,
+ 41.974,
+ 55.527,
+ 47.8,
+ 52.537,
+ 49.919,
+ 52.887,
+ 59.837,
+ 50.35,
+ 51.386,
+ 57.674
+ ],
+ "y":[
+ 4910.416756,
+ 3008.647355,
+ 1029.161251,
+ 3214.857818,
+ 743.3870368,
+ 556.1032651,
+ 1783.432873,
+ 1109.374338,
+ 1133.98495,
+ 1172.603047,
+ 795.757282,
+ 3259.178978,
+ 2517.736547,
+ 3081.761022,
+ 2785.493582,
+ 958.5668124,
+ 505.7538077,
+ 556.8083834,
+ 21745.57328,
+ 884.7552507,
+ 993.2239571,
+ 874.6858643,
+ 764.7259628,
+ 1267.613204,
+ 745.3695408,
+ 640.3224383,
+ 21951.21176,
+ 1544.228586,
+ 663.2236766,
+ 686.3952693,
+ 1497.492223,
+ 3710.982963,
+ 2370.619976,
+ 502.3197334,
+ 3876.485958,
+ 808.8970728,
+ 1981.951806,
+ 4319.804067,
+ 670.0806011,
+ 1737.561657,
+ 1561.769116,
+ 1348.285159,
+ 1450.992513,
+ 8028.651439,
+ 2202.988423,
+ 3781.410618,
+ 962.4922932,
+ 1532.776998,
+ 3120.876811,
+ 843.7331372,
+ 1588.688299,
+ 685.5876821
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 26983828,
+ 5079716,
+ 114313951,
+ 23796400,
+ 10599793,
+ 25094412,
+ 2108457,
+ 9537988,
+ 5302800,
+ 7278866,
+ 4282586,
+ 5703430,
+ 4908554,
+ 3055235,
+ 2156814,
+ 63759976,
+ 2554598,
+ 1839782,
+ 2984494,
+ 15990099,
+ 3080828,
+ 1039009,
+ 220239000,
+ 2873520,
+ 13503563
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 68.481,
+ 50.023,
+ 61.489,
+ 74.21,
+ 67.052,
+ 63.837,
+ 70.75,
+ 72.649,
+ 61.788,
+ 61.31,
+ 56.696,
+ 56.029,
+ 49.923,
+ 57.402,
+ 70.11,
+ 65.032,
+ 57.47,
+ 68.681,
+ 66.353,
+ 58.447,
+ 73.44,
+ 68.3,
+ 73.38,
+ 69.481,
+ 67.456
+ ],
+ "y":[
+ 10079.02674,
+ 3548.097832,
+ 6660.118654,
+ 22090.88306,
+ 4756.763836,
+ 3815.80787,
+ 5926.876967,
+ 6380.494966,
+ 2681.9889,
+ 6679.62326,
+ 5138.922374,
+ 4879.992748,
+ 1874.298931,
+ 3203.208066,
+ 6650.195573,
+ 7674.929108,
+ 5486.371089,
+ 5351.912144,
+ 3248.373311,
+ 6281.290855,
+ 9770.524921,
+ 7899.554209,
+ 24072.63213,
+ 6504.339663,
+ 13143.95095
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 14074100,
+ 3164900
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 73.49,
+ 72.22
+ ],
+ "y":[
+ 18334.19751,
+ 16233.7177
+ ]
+ }
+ ],
+ "name":"1977"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 12881816,
+ 377967,
+ 93074406,
+ 7272485,
+ 1000281000,
+ 5264500,
+ 708000000,
+ 153343000,
+ 43072751,
+ 14173318,
+ 3858421,
+ 118454974,
+ 2347031,
+ 17647518,
+ 39326000,
+ 1497494,
+ 3086876,
+ 14441916,
+ 1756032,
+ 34680442,
+ 15796314,
+ 1301048,
+ 91462088,
+ 53456774,
+ 11254672,
+ 2651869,
+ 15410151,
+ 9410494,
+ 18501390,
+ 48827160,
+ 56142181,
+ 1425876,
+ 9657618
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 39.854,
+ 69.052,
+ 50.009,
+ 50.957,
+ 65.525,
+ 75.45,
+ 56.596,
+ 56.159,
+ 59.62,
+ 62.038,
+ 74.45,
+ 77.11,
+ 63.739,
+ 69.1,
+ 67.123,
+ 71.309,
+ 66.983,
+ 68,
+ 57.489,
+ 58.056,
+ 49.594,
+ 62.728,
+ 56.158,
+ 62.082,
+ 63.012,
+ 71.76,
+ 68.757,
+ 64.59,
+ 72.16,
+ 64.597,
+ 58.816,
+ 64.406,
+ 49.113
+ ],
+ "y":[
+ 978.0114388,
+ 19211.14731,
+ 676.9818656,
+ 624.4754784,
+ 962.4213805,
+ 14560.53051,
+ 855.7235377,
+ 1516.872988,
+ 7608.334602,
+ 14517.90711,
+ 15367.0292,
+ 19384.10571,
+ 4161.415959,
+ 4106.525293,
+ 5622.942464,
+ 31354.03573,
+ 7640.519521,
+ 4920.355951,
+ 2000.603139,
+ 424,
+ 718.3730947,
+ 12954.79101,
+ 1443.429832,
+ 2603.273765,
+ 33693.17525,
+ 15169.16112,
+ 1648.079789,
+ 3761.837715,
+ 7426.354774,
+ 2393.219781,
+ 707.2357863,
+ 4336.032082,
+ 1977.55701
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 2780097,
+ 7574613,
+ 9856303,
+ 4172693,
+ 8892098,
+ 4413368,
+ 10303704,
+ 5117810,
+ 4826933,
+ 54433565,
+ 78335266,
+ 9786480,
+ 10705535,
+ 233997,
+ 3480000,
+ 56535636,
+ 562548,
+ 14310401,
+ 4114787,
+ 36227381,
+ 9859650,
+ 22356726,
+ 9032824,
+ 5048043,
+ 1861252,
+ 37983310,
+ 8325260,
+ 6468126,
+ 47328791,
+ 56339704
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 70.42,
+ 73.18,
+ 73.93,
+ 70.69,
+ 71.08,
+ 70.46,
+ 70.96,
+ 74.63,
+ 74.55,
+ 74.89,
+ 73.8,
+ 75.24,
+ 69.39,
+ 76.99,
+ 73.1,
+ 74.98,
+ 74.101,
+ 76.05,
+ 75.97,
+ 71.32,
+ 72.77,
+ 69.66,
+ 70.162,
+ 70.8,
+ 71.063,
+ 76.3,
+ 76.42,
+ 76.21,
+ 61.036,
+ 74.04
+ ],
+ "y":[
+ 3630.880722,
+ 21597.08362,
+ 20979.84589,
+ 4126.613157,
+ 8224.191647,
+ 13221.82184,
+ 15377.22855,
+ 21688.04048,
+ 18533.15761,
+ 20293.89746,
+ 22031.53274,
+ 15268.42089,
+ 12545.99066,
+ 23269.6075,
+ 12618.32141,
+ 16537.4835,
+ 11222.58762,
+ 21399.46046,
+ 26298.63531,
+ 8451.531004,
+ 11753.84291,
+ 9605.314053,
+ 15181.0927,
+ 11348.54585,
+ 17866.72175,
+ 13926.16997,
+ 20667.38125,
+ 28397.71512,
+ 4241.356344,
+ 18232.42452
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 20033753,
+ 7016384,
+ 3641603,
+ 970347,
+ 6634596,
+ 4580410,
+ 9250831,
+ 2476971,
+ 4875118,
+ 348643,
+ 30646495,
+ 1774735,
+ 9025951,
+ 305991,
+ 45681811,
+ 285483,
+ 2637297,
+ 38111756,
+ 753874,
+ 715523,
+ 11400338,
+ 4710497,
+ 825987,
+ 17661452,
+ 1411807,
+ 1956875,
+ 3344074,
+ 9171477,
+ 6502825,
+ 6998256,
+ 1622136,
+ 992040,
+ 20198730,
+ 12587223,
+ 1099010,
+ 6437188,
+ 73039376,
+ 517810,
+ 5507565,
+ 98593,
+ 6147783,
+ 3464522,
+ 5828892,
+ 31140029,
+ 20367053,
+ 649901,
+ 19844382,
+ 2644765,
+ 6734098,
+ 12939400,
+ 6100407,
+ 7636524
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 61.368,
+ 39.942,
+ 50.904,
+ 61.484,
+ 48.122,
+ 47.471,
+ 52.961,
+ 48.295,
+ 49.517,
+ 52.933,
+ 47.784,
+ 56.695,
+ 53.983,
+ 48.812,
+ 56.006,
+ 43.662,
+ 43.89,
+ 44.916,
+ 56.564,
+ 45.58,
+ 53.744,
+ 42.891,
+ 39.327,
+ 58.766,
+ 55.078,
+ 44.852,
+ 62.155,
+ 48.969,
+ 45.642,
+ 43.916,
+ 53.599,
+ 66.711,
+ 59.65,
+ 42.795,
+ 58.968,
+ 42.598,
+ 45.826,
+ 69.885,
+ 46.218,
+ 60.351,
+ 52.379,
+ 38.445,
+ 42.955,
+ 58.161,
+ 50.338,
+ 55.561,
+ 50.608,
+ 55.471,
+ 64.048,
+ 49.849,
+ 51.821,
+ 60.363
+ ],
+ "y":[
+ 5745.160213,
+ 2756.953672,
+ 1277.897616,
+ 4551.14215,
+ 807.1985855,
+ 559.603231,
+ 2367.983282,
+ 956.7529907,
+ 797.9081006,
+ 1267.100083,
+ 673.7478181,
+ 4879.507522,
+ 2602.710169,
+ 2879.468067,
+ 3503.729636,
+ 927.8253427,
+ 524.8758493,
+ 577.8607471,
+ 15113.36194,
+ 835.8096108,
+ 876.032569,
+ 857.2503577,
+ 838.1239671,
+ 1348.225791,
+ 797.2631074,
+ 572.1995694,
+ 17364.27538,
+ 1302.878658,
+ 632.8039209,
+ 618.0140641,
+ 1481.150189,
+ 3688.037739,
+ 2702.620356,
+ 462.2114149,
+ 4191.100511,
+ 909.7221354,
+ 1576.97375,
+ 5267.219353,
+ 881.5706467,
+ 1890.218117,
+ 1518.479984,
+ 1465.010784,
+ 1176.807031,
+ 8568.266228,
+ 1895.544073,
+ 3895.384018,
+ 874.2426069,
+ 1344.577953,
+ 3560.233174,
+ 682.2662268,
+ 1408.678565,
+ 788.8550411
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 29341374,
+ 5642224,
+ 128962939,
+ 25201900,
+ 11487112,
+ 27764644,
+ 2424367,
+ 9789224,
+ 5968349,
+ 8365850,
+ 4474873,
+ 6395630,
+ 5198399,
+ 3669448,
+ 2298309,
+ 71640904,
+ 2979423,
+ 2036305,
+ 3366439,
+ 18125129,
+ 3279001,
+ 1116479,
+ 232187835,
+ 2953997,
+ 15620766
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 69.942,
+ 53.859,
+ 63.336,
+ 75.76,
+ 70.565,
+ 66.653,
+ 73.45,
+ 73.717,
+ 63.727,
+ 64.342,
+ 56.604,
+ 58.137,
+ 51.461,
+ 60.909,
+ 71.21,
+ 67.405,
+ 59.298,
+ 70.472,
+ 66.874,
+ 61.406,
+ 73.75,
+ 68.832,
+ 74.65,
+ 70.805,
+ 68.557
+ ],
+ "y":[
+ 8997.897412,
+ 3156.510452,
+ 7030.835878,
+ 22898.79214,
+ 5095.665738,
+ 4397.575659,
+ 5262.734751,
+ 7316.918107,
+ 2861.092386,
+ 7213.791267,
+ 4098.344175,
+ 4820.49479,
+ 2011.159549,
+ 3121.760794,
+ 6068.05135,
+ 9611.147541,
+ 3470.338156,
+ 7009.601598,
+ 4258.503604,
+ 6434.501797,
+ 10330.98915,
+ 9119.528607,
+ 25009.55914,
+ 6920.223051,
+ 11152.41011
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 15184200,
+ 3210650
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 74.74,
+ 73.84
+ ],
+ "y":[
+ 19477.00928,
+ 17632.4104
+ ]
+ }
+ ],
+ "name":"1982"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 13867957,
+ 454612,
+ 103764241,
+ 8371791,
+ 1084035000,
+ 5584510,
+ 788000000,
+ 169276000,
+ 51889696,
+ 16543189,
+ 4203148,
+ 122091325,
+ 2820042,
+ 19067554,
+ 41622000,
+ 1891487,
+ 3089353,
+ 16331785,
+ 2015133,
+ 38028578,
+ 17917180,
+ 1593882,
+ 105186881,
+ 60017788,
+ 14619745,
+ 2794552,
+ 16495304,
+ 11242847,
+ 19757799,
+ 52910342,
+ 62826491,
+ 1691210,
+ 11219340
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 40.822,
+ 70.75,
+ 52.819,
+ 53.914,
+ 67.274,
+ 76.2,
+ 58.553,
+ 60.137,
+ 63.04,
+ 65.044,
+ 75.6,
+ 78.67,
+ 65.869,
+ 70.647,
+ 69.81,
+ 74.174,
+ 67.926,
+ 69.5,
+ 60.222,
+ 58.339,
+ 52.537,
+ 67.734,
+ 58.245,
+ 64.151,
+ 66.295,
+ 73.56,
+ 69.011,
+ 66.974,
+ 73.4,
+ 66.084,
+ 62.82,
+ 67.046,
+ 52.922
+ ],
+ "y":[
+ 852.3959448,
+ 18524.02406,
+ 751.9794035,
+ 683.8955732,
+ 1378.904018,
+ 20038.47269,
+ 976.5126756,
+ 1748.356961,
+ 6642.881371,
+ 11643.57268,
+ 17122.47986,
+ 22375.94189,
+ 4448.679912,
+ 4106.492315,
+ 8533.088805,
+ 28118.42998,
+ 5377.091329,
+ 5249.802653,
+ 2338.008304,
+ 385,
+ 775.6324501,
+ 18115.22313,
+ 1704.686583,
+ 2189.634995,
+ 21198.26136,
+ 18861.53081,
+ 1876.766827,
+ 3116.774285,
+ 11054.56175,
+ 2982.653773,
+ 820.7994449,
+ 5107.197384,
+ 1971.741538
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 3075321,
+ 7578903,
+ 9870200,
+ 4338977,
+ 8971958,
+ 4484310,
+ 10311597,
+ 5127024,
+ 4931729,
+ 55630100,
+ 77718298,
+ 9974490,
+ 10612740,
+ 244676,
+ 3539900,
+ 56729703,
+ 569473,
+ 14665278,
+ 4186147,
+ 37740710,
+ 9915289,
+ 22686371,
+ 9230783,
+ 5199318,
+ 1945870,
+ 38880702,
+ 8421403,
+ 6649942,
+ 52881328,
+ 56981620
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 72,
+ 74.94,
+ 75.35,
+ 71.14,
+ 71.34,
+ 71.52,
+ 71.58,
+ 74.8,
+ 74.83,
+ 76.34,
+ 74.847,
+ 76.67,
+ 69.58,
+ 77.23,
+ 74.36,
+ 76.42,
+ 74.865,
+ 76.83,
+ 75.89,
+ 70.98,
+ 74.06,
+ 69.53,
+ 71.218,
+ 71.08,
+ 72.25,
+ 76.9,
+ 77.19,
+ 77.41,
+ 63.108,
+ 75.007
+ ],
+ "y":[
+ 3738.932735,
+ 23687.82607,
+ 22525.56308,
+ 4314.114757,
+ 8239.854824,
+ 13822.58394,
+ 16310.4434,
+ 25116.17581,
+ 21141.01223,
+ 22066.44214,
+ 24639.18566,
+ 16120.52839,
+ 12986.47998,
+ 26923.20628,
+ 13872.86652,
+ 19207.23482,
+ 11732.51017,
+ 23651.32361,
+ 31540.9748,
+ 9082.351172,
+ 13039.30876,
+ 9696.273295,
+ 15870.87851,
+ 12037.26758,
+ 18678.53492,
+ 15764.98313,
+ 23586.92927,
+ 30281.70459,
+ 5089.043686,
+ 21664.78767
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 23254956,
+ 7874230,
+ 4243788,
+ 1151184,
+ 7586551,
+ 5126023,
+ 10780667,
+ 2840009,
+ 5498955,
+ 395114,
+ 35481645,
+ 2064095,
+ 10761098,
+ 311025,
+ 52799062,
+ 341244,
+ 2915959,
+ 42999530,
+ 880397,
+ 848406,
+ 14168101,
+ 5650262,
+ 927524,
+ 21198082,
+ 1599200,
+ 2269414,
+ 3799845,
+ 10568642,
+ 7824747,
+ 7634008,
+ 1841240,
+ 1042663,
+ 22987397,
+ 12891952,
+ 1278184,
+ 7332638,
+ 81551520,
+ 562035,
+ 6349365,
+ 110812,
+ 7171347,
+ 3868905,
+ 6921858,
+ 35933379,
+ 24725960,
+ 779348,
+ 23040630,
+ 3154264,
+ 7724976,
+ 15283050,
+ 7272406,
+ 9216418
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 65.799,
+ 39.906,
+ 52.337,
+ 63.622,
+ 49.557,
+ 48.211,
+ 54.985,
+ 50.485,
+ 51.051,
+ 54.926,
+ 47.412,
+ 57.47,
+ 54.655,
+ 50.04,
+ 59.797,
+ 45.664,
+ 46.453,
+ 46.684,
+ 60.19,
+ 49.265,
+ 55.729,
+ 45.552,
+ 41.245,
+ 59.339,
+ 57.18,
+ 46.027,
+ 66.234,
+ 49.35,
+ 47.457,
+ 46.364,
+ 56.145,
+ 68.74,
+ 62.677,
+ 42.861,
+ 60.835,
+ 44.555,
+ 46.886,
+ 71.913,
+ 44.02,
+ 61.728,
+ 55.769,
+ 40.006,
+ 44.501,
+ 60.834,
+ 51.744,
+ 57.678,
+ 51.535,
+ 56.941,
+ 66.894,
+ 51.509,
+ 50.821,
+ 62.351
+ ],
+ "y":[
+ 5681.358539,
+ 2430.208311,
+ 1225.85601,
+ 6205.88385,
+ 912.0631417,
+ 621.8188189,
+ 2602.664206,
+ 844.8763504,
+ 952.386129,
+ 1315.980812,
+ 672.774812,
+ 4201.194937,
+ 2156.956069,
+ 2880.102568,
+ 3885.46071,
+ 966.8968149,
+ 521.1341333,
+ 573.7413142,
+ 11864.40844,
+ 611.6588611,
+ 847.0061135,
+ 805.5724718,
+ 736.4153921,
+ 1361.936856,
+ 773.9932141,
+ 506.1138573,
+ 11770.5898,
+ 1155.441948,
+ 635.5173634,
+ 684.1715576,
+ 1421.603576,
+ 4783.586903,
+ 2755.046991,
+ 389.8761846,
+ 3693.731337,
+ 668.3000228,
+ 1385.029563,
+ 5303.377488,
+ 847.991217,
+ 1516.525457,
+ 1441.72072,
+ 1294.447788,
+ 1093.244963,
+ 7825.823398,
+ 1507.819159,
+ 3984.839812,
+ 831.8220794,
+ 1202.201361,
+ 3810.419296,
+ 617.7244065,
+ 1213.315116,
+ 706.1573059
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 31620918,
+ 6156369,
+ 142938076,
+ 26549700,
+ 12463354,
+ 30964245,
+ 2799811,
+ 10239839,
+ 6655297,
+ 9545158,
+ 4842194,
+ 7326406,
+ 5756203,
+ 4372203,
+ 2326606,
+ 80122492,
+ 3344353,
+ 2253639,
+ 3886512,
+ 20195924,
+ 3444468,
+ 1191336,
+ 242803533,
+ 3045153,
+ 17910182
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 70.774,
+ 57.251,
+ 65.205,
+ 76.86,
+ 72.492,
+ 67.768,
+ 74.752,
+ 74.174,
+ 66.046,
+ 67.231,
+ 63.154,
+ 60.782,
+ 53.636,
+ 64.492,
+ 71.77,
+ 69.498,
+ 62.008,
+ 71.523,
+ 67.378,
+ 64.134,
+ 74.63,
+ 69.582,
+ 75.02,
+ 71.918,
+ 70.19
+ ],
+ "y":[
+ 9139.671389,
+ 2753.69149,
+ 7807.095818,
+ 26626.51503,
+ 5547.063754,
+ 4903.2191,
+ 5629.915318,
+ 7532.924763,
+ 2899.842175,
+ 6481.776993,
+ 4140.442097,
+ 4246.485974,
+ 1823.015995,
+ 3023.096699,
+ 6351.237495,
+ 8688.156003,
+ 2955.984375,
+ 7034.779161,
+ 3998.875695,
+ 6360.943444,
+ 12281.34191,
+ 7388.597823,
+ 29884.35041,
+ 7452.398969,
+ 9883.584648
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 16257249,
+ 3317166
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 76.32,
+ 74.32
+ ],
+ "y":[
+ 21888.88903,
+ 19007.19129
+ ]
+ }
+ ],
+ "name":"1987"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 16317921,
+ 529491,
+ 113704579,
+ 10150094,
+ 1164970000,
+ 5829696,
+ 872000000,
+ 184816000,
+ 60397973,
+ 17861905,
+ 4936550,
+ 124329269,
+ 3867409,
+ 20711375,
+ 43805450,
+ 1418095,
+ 3219994,
+ 18319502,
+ 2312802,
+ 40546538,
+ 20326209,
+ 1915208,
+ 120065004,
+ 67185766,
+ 16945857,
+ 3235865,
+ 17587060,
+ 13219062,
+ 20686918,
+ 56667095,
+ 69940728,
+ 2104779,
+ 13367997
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 41.674,
+ 72.601,
+ 56.018,
+ 55.803,
+ 68.69,
+ 77.601,
+ 60.223,
+ 62.681,
+ 65.742,
+ 59.461,
+ 76.93,
+ 79.36,
+ 68.015,
+ 69.978,
+ 72.244,
+ 75.19,
+ 69.292,
+ 70.693,
+ 61.271,
+ 59.32,
+ 55.727,
+ 71.197,
+ 60.838,
+ 66.458,
+ 68.768,
+ 75.788,
+ 70.379,
+ 69.249,
+ 74.26,
+ 67.298,
+ 67.662,
+ 69.718,
+ 55.599
+ ],
+ "y":[
+ 649.3413952,
+ 19035.57917,
+ 837.8101643,
+ 682.3031755,
+ 1655.784158,
+ 24757.60301,
+ 1164.406809,
+ 2383.140898,
+ 7235.653188,
+ 3745.640687,
+ 18051.52254,
+ 26824.89511,
+ 3431.593647,
+ 3726.063507,
+ 12104.27872,
+ 34932.91959,
+ 6890.806854,
+ 7277.912802,
+ 1785.402016,
+ 347,
+ 897.7403604,
+ 18616.70691,
+ 1971.829464,
+ 2279.324017,
+ 24841.61777,
+ 24769.8912,
+ 2153.739222,
+ 3340.542768,
+ 15215.6579,
+ 4616.896545,
+ 989.0231487,
+ 6017.654756,
+ 1879.496673
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 3326498,
+ 7914969,
+ 10045622,
+ 4256013,
+ 8658506,
+ 4494013,
+ 10315702,
+ 5171393,
+ 5041039,
+ 57374179,
+ 80597764,
+ 10325429,
+ 10348684,
+ 259012,
+ 3557761,
+ 56840847,
+ 621621,
+ 15174244,
+ 4286357,
+ 38370697,
+ 9927680,
+ 22797027,
+ 9826397,
+ 5302888,
+ 1999210,
+ 39549438,
+ 8718867,
+ 6995447,
+ 58179144,
+ 57866349
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 71.581,
+ 76.04,
+ 76.46,
+ 72.178,
+ 71.19,
+ 72.527,
+ 72.4,
+ 75.33,
+ 75.7,
+ 77.46,
+ 76.07,
+ 77.03,
+ 69.17,
+ 78.77,
+ 75.467,
+ 77.44,
+ 75.435,
+ 77.42,
+ 77.32,
+ 70.99,
+ 74.86,
+ 69.36,
+ 71.659,
+ 71.38,
+ 73.64,
+ 77.57,
+ 78.16,
+ 78.03,
+ 66.146,
+ 76.42
+ ],
+ "y":[
+ 2497.437901,
+ 27042.01868,
+ 25575.57069,
+ 2546.781445,
+ 6302.623438,
+ 8447.794873,
+ 14297.02122,
+ 26406.73985,
+ 20647.16499,
+ 24703.79615,
+ 26505.30317,
+ 17541.49634,
+ 10535.62855,
+ 25144.39201,
+ 17558.81555,
+ 22013.64486,
+ 7003.339037,
+ 26790.94961,
+ 33965.66115,
+ 7738.881247,
+ 16207.26663,
+ 6598.409903,
+ 9325.068238,
+ 9498.467723,
+ 14214.71681,
+ 18603.06452,
+ 23880.01683,
+ 31871.5303,
+ 5678.348271,
+ 22705.09254
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 26298373,
+ 8735988,
+ 4981671,
+ 1342614,
+ 8878303,
+ 5809236,
+ 12467171,
+ 3265124,
+ 6429417,
+ 454429,
+ 41672143,
+ 2409073,
+ 12772596,
+ 384156,
+ 59402198,
+ 387838,
+ 3668440,
+ 52088559,
+ 985739,
+ 1025384,
+ 16278738,
+ 6990574,
+ 1050938,
+ 25020539,
+ 1803195,
+ 1912974,
+ 4364501,
+ 12210395,
+ 10014249,
+ 8416215,
+ 2119465,
+ 1096202,
+ 25798239,
+ 13160731,
+ 1554253,
+ 8392818,
+ 93364244,
+ 622191,
+ 7290203,
+ 125911,
+ 8307920,
+ 4260884,
+ 6099799,
+ 39964159,
+ 28227588,
+ 962344,
+ 26605473,
+ 3747553,
+ 8523077,
+ 18252190,
+ 8381163,
+ 10704340
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 67.744,
+ 40.647,
+ 53.919,
+ 62.745,
+ 50.26,
+ 44.736,
+ 54.314,
+ 49.396,
+ 51.724,
+ 57.939,
+ 45.548,
+ 56.433,
+ 52.044,
+ 51.604,
+ 63.674,
+ 47.545,
+ 49.991,
+ 48.091,
+ 61.366,
+ 52.644,
+ 57.501,
+ 48.576,
+ 43.266,
+ 59.285,
+ 59.685,
+ 40.802,
+ 68.755,
+ 52.214,
+ 49.42,
+ 48.388,
+ 58.333,
+ 69.745,
+ 65.393,
+ 44.284,
+ 61.999,
+ 47.391,
+ 47.472,
+ 73.615,
+ 23.599,
+ 62.742,
+ 58.196,
+ 38.333,
+ 39.658,
+ 61.888,
+ 53.556,
+ 58.474,
+ 50.44,
+ 58.061,
+ 70.001,
+ 48.825,
+ 46.1,
+ 60.377
+ ],
+ "y":[
+ 5023.216647,
+ 2627.845685,
+ 1191.207681,
+ 7954.111645,
+ 931.7527731,
+ 631.6998778,
+ 1793.163278,
+ 747.9055252,
+ 1058.0643,
+ 1246.90737,
+ 457.7191807,
+ 4016.239529,
+ 1648.073791,
+ 2377.156192,
+ 3794.755195,
+ 1132.055034,
+ 582.8585102,
+ 421.3534653,
+ 13522.15752,
+ 665.6244126,
+ 925.060154,
+ 794.3484384,
+ 745.5398706,
+ 1341.921721,
+ 977.4862725,
+ 636.6229191,
+ 9640.138501,
+ 1040.67619,
+ 563.2000145,
+ 739.014375,
+ 1361.369784,
+ 6058.253846,
+ 2948.047252,
+ 410.8968239,
+ 3804.537999,
+ 581.182725,
+ 1619.848217,
+ 6101.255823,
+ 737.0685949,
+ 1428.777814,
+ 1367.899369,
+ 1068.696278,
+ 926.9602964,
+ 7225.069258,
+ 1492.197043,
+ 3553.0224,
+ 825.682454,
+ 1034.298904,
+ 4332.720164,
+ 644.1707969,
+ 1210.884633,
+ 693.4207856
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 33958947,
+ 6893451,
+ 155975974,
+ 28523502,
+ 13572994,
+ 34202721,
+ 3173216,
+ 10723260,
+ 7351181,
+ 10748394,
+ 5274649,
+ 8486949,
+ 6326682,
+ 5077347,
+ 2378618,
+ 88111030,
+ 4017939,
+ 2484997,
+ 4483945,
+ 22430449,
+ 3585176,
+ 1183669,
+ 256894189,
+ 3149262,
+ 20265563
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 71.868,
+ 59.957,
+ 67.057,
+ 77.95,
+ 74.126,
+ 68.421,
+ 75.713,
+ 74.414,
+ 68.457,
+ 69.613,
+ 66.798,
+ 63.373,
+ 55.089,
+ 66.399,
+ 71.766,
+ 71.455,
+ 65.843,
+ 72.462,
+ 68.225,
+ 66.458,
+ 73.911,
+ 69.862,
+ 76.09,
+ 72.752,
+ 71.15
+ ],
+ "y":[
+ 9308.41871,
+ 2961.699694,
+ 6950.283021,
+ 26342.88426,
+ 7596.125964,
+ 5444.648617,
+ 6160.416317,
+ 5592.843963,
+ 3044.214214,
+ 7103.702595,
+ 4444.2317,
+ 4439.45084,
+ 1456.309517,
+ 3081.694603,
+ 7404.923685,
+ 9472.384295,
+ 2170.151724,
+ 6618.74305,
+ 4196.411078,
+ 4446.380924,
+ 14641.58711,
+ 7370.990932,
+ 32003.93224,
+ 8137.004775,
+ 10733.92631
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 17481977,
+ 3437674
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 77.56,
+ 76.33
+ ],
+ "y":[
+ 23424.76683,
+ 18363.32494
+ ]
+ }
+ ],
+ "name":"1992"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 22227415,
+ 598561,
+ 123315288,
+ 11782962,
+ 1230075000,
+ 6495918,
+ 959000000,
+ 199278000,
+ 63327987,
+ 20775703,
+ 5531387,
+ 125956499,
+ 4526235,
+ 21585105,
+ 46173816,
+ 1765345,
+ 3430388,
+ 20476091,
+ 2494803,
+ 43247867,
+ 23001113,
+ 2283635,
+ 135564834,
+ 75012988,
+ 21229759,
+ 3802309,
+ 18698655,
+ 15081016,
+ 21628605,
+ 60216677,
+ 76048996,
+ 2826046,
+ 15826497
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 41.763,
+ 73.925,
+ 59.412,
+ 56.534,
+ 70.426,
+ 80,
+ 61.765,
+ 66.041,
+ 68.042,
+ 58.811,
+ 78.269,
+ 80.69,
+ 69.772,
+ 67.727,
+ 74.647,
+ 76.156,
+ 70.265,
+ 71.938,
+ 63.625,
+ 60.328,
+ 59.426,
+ 72.499,
+ 61.818,
+ 68.564,
+ 70.533,
+ 77.158,
+ 70.457,
+ 71.527,
+ 75.25,
+ 67.521,
+ 70.672,
+ 71.096,
+ 58.02
+ ],
+ "y":[
+ 635.341351,
+ 20292.01679,
+ 972.7700352,
+ 734.28517,
+ 2289.234136,
+ 28377.63219,
+ 1458.817442,
+ 3119.335603,
+ 8263.590301,
+ 3076.239795,
+ 20896.60924,
+ 28816.58499,
+ 3645.379572,
+ 1690.756814,
+ 15993.52796,
+ 40300.61996,
+ 8754.96385,
+ 10132.90964,
+ 1902.2521,
+ 415,
+ 1010.892138,
+ 19702.05581,
+ 2049.350521,
+ 2536.534925,
+ 20586.69019,
+ 33519.4766,
+ 2664.477257,
+ 4014.238972,
+ 20206.82098,
+ 5852.625497,
+ 1385.896769,
+ 7110.667619,
+ 2117.484526
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 3428038,
+ 8069876,
+ 10199787,
+ 3607000,
+ 8066057,
+ 4444595,
+ 10300707,
+ 5283663,
+ 5134406,
+ 58623428,
+ 82011073,
+ 10502372,
+ 10244684,
+ 271192,
+ 3667233,
+ 57479469,
+ 692651,
+ 15604464,
+ 4405672,
+ 38654957,
+ 10156415,
+ 22562458,
+ 10336594,
+ 5383010,
+ 2011612,
+ 39855442,
+ 8897619,
+ 7193761,
+ 63047647,
+ 58808266
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 72.95,
+ 77.51,
+ 77.53,
+ 73.244,
+ 70.32,
+ 73.68,
+ 74.01,
+ 76.11,
+ 77.13,
+ 78.64,
+ 77.34,
+ 77.869,
+ 71.04,
+ 78.95,
+ 76.122,
+ 78.82,
+ 75.445,
+ 78.03,
+ 78.32,
+ 72.75,
+ 75.97,
+ 69.72,
+ 72.232,
+ 72.71,
+ 75.13,
+ 78.77,
+ 79.39,
+ 79.37,
+ 68.835,
+ 77.218
+ ],
+ "y":[
+ 3193.054604,
+ 29095.92066,
+ 27561.19663,
+ 4766.355904,
+ 5970.38876,
+ 9875.604515,
+ 16048.51424,
+ 29804.34567,
+ 23723.9502,
+ 25889.78487,
+ 27788.88416,
+ 18747.69814,
+ 11712.7768,
+ 28061.09966,
+ 24521.94713,
+ 24675.02446,
+ 6465.613349,
+ 30246.13063,
+ 41283.16433,
+ 10159.58368,
+ 17641.03156,
+ 7346.547557,
+ 7914.320304,
+ 12126.23065,
+ 17161.10735,
+ 20445.29896,
+ 25266.59499,
+ 32135.32301,
+ 6601.429915,
+ 26074.53136
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 29072015,
+ 9875024,
+ 6066080,
+ 1536536,
+ 10352843,
+ 6121610,
+ 14195809,
+ 3696513,
+ 7562011,
+ 527982,
+ 47798986,
+ 2800947,
+ 14625967,
+ 417908,
+ 66134291,
+ 439971,
+ 4058319,
+ 59861301,
+ 1126189,
+ 1235767,
+ 18418288,
+ 8048834,
+ 1193708,
+ 28263827,
+ 1982823,
+ 2200725,
+ 4759670,
+ 14165114,
+ 10419991,
+ 9384984,
+ 2444741,
+ 1149818,
+ 28529501,
+ 16603334,
+ 1774766,
+ 9666252,
+ 106207839,
+ 684810,
+ 7212583,
+ 145608,
+ 9535314,
+ 4578212,
+ 6633514,
+ 42835005,
+ 32160729,
+ 1054486,
+ 30686889,
+ 4320890,
+ 9231669,
+ 21210254,
+ 9417789,
+ 11404948
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 69.152,
+ 40.963,
+ 54.777,
+ 52.556,
+ 50.324,
+ 45.326,
+ 52.199,
+ 46.066,
+ 51.573,
+ 60.66,
+ 42.587,
+ 52.962,
+ 47.991,
+ 53.157,
+ 67.217,
+ 48.245,
+ 53.378,
+ 49.402,
+ 60.461,
+ 55.861,
+ 58.556,
+ 51.455,
+ 44.873,
+ 54.407,
+ 55.558,
+ 42.221,
+ 71.555,
+ 54.978,
+ 47.495,
+ 49.903,
+ 60.43,
+ 70.736,
+ 67.66,
+ 46.344,
+ 58.909,
+ 51.313,
+ 47.464,
+ 74.772,
+ 36.087,
+ 63.306,
+ 60.187,
+ 39.897,
+ 43.795,
+ 60.236,
+ 55.373,
+ 54.289,
+ 48.466,
+ 58.39,
+ 71.973,
+ 44.578,
+ 40.238,
+ 46.809
+ ],
+ "y":[
+ 4797.295051,
+ 2277.140884,
+ 1232.975292,
+ 8647.142313,
+ 946.2949618,
+ 463.1151478,
+ 1694.337469,
+ 740.5063317,
+ 1004.961353,
+ 1173.618235,
+ 312.188423,
+ 3484.164376,
+ 1786.265407,
+ 1895.016984,
+ 4173.181797,
+ 2814.480755,
+ 913.47079,
+ 515.8894013,
+ 14722.84188,
+ 653.7301704,
+ 1005.245812,
+ 869.4497668,
+ 796.6644681,
+ 1360.485021,
+ 1186.147994,
+ 609.1739508,
+ 9467.446056,
+ 986.2958956,
+ 692.2758103,
+ 790.2579846,
+ 1483.136136,
+ 7425.705295,
+ 2982.101858,
+ 472.3460771,
+ 3899.52426,
+ 580.3052092,
+ 1624.941275,
+ 6071.941411,
+ 589.9445051,
+ 1339.076036,
+ 1392.368347,
+ 574.6481576,
+ 930.5964284,
+ 7479.188244,
+ 1632.210764,
+ 3876.76846,
+ 789.1862231,
+ 982.2869243,
+ 4876.798614,
+ 816.559081,
+ 1071.353818,
+ 792.4499603
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 36203463,
+ 7693188,
+ 168546719,
+ 30305843,
+ 14599929,
+ 37657830,
+ 3518107,
+ 10983007,
+ 7992357,
+ 11911819,
+ 5783439,
+ 9803875,
+ 6913545,
+ 5867957,
+ 2531311,
+ 95895146,
+ 4609572,
+ 2734531,
+ 5154123,
+ 24748122,
+ 3759430,
+ 1138101,
+ 272911760,
+ 3262838,
+ 22374398
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 73.275,
+ 62.05,
+ 69.388,
+ 78.61,
+ 75.816,
+ 70.313,
+ 77.26,
+ 76.151,
+ 69.957,
+ 72.312,
+ 69.535,
+ 66.322,
+ 56.671,
+ 67.659,
+ 72.262,
+ 73.67,
+ 68.426,
+ 73.738,
+ 69.4,
+ 68.386,
+ 74.917,
+ 69.465,
+ 76.81,
+ 74.223,
+ 72.146
+ ],
+ "y":[
+ 10967.28195,
+ 3326.143191,
+ 7957.980824,
+ 28954.92589,
+ 10118.05318,
+ 6117.361746,
+ 6677.045314,
+ 5431.990415,
+ 3614.101285,
+ 7429.455877,
+ 5154.825496,
+ 4684.313807,
+ 1341.726931,
+ 3160.454906,
+ 7121.924704,
+ 9767.29753,
+ 2253.023004,
+ 7113.692252,
+ 4247.400261,
+ 5838.347657,
+ 16999.4333,
+ 8792.573126,
+ 35767.43303,
+ 9230.240708,
+ 10165.49518
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 18565243,
+ 3676187
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 78.83,
+ 77.55
+ ],
+ "y":[
+ 26997.93657,
+ 21050.41377
+ ]
+ }
+ ],
+ "name":"1997"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 25268405,
+ 656397,
+ 135656790,
+ 12926707,
+ 1280400000,
+ 6762476,
+ 1034172547,
+ 211060000,
+ 66907826,
+ 24001816,
+ 6029529,
+ 127065841,
+ 5307470,
+ 22215365,
+ 47969150,
+ 2111561,
+ 3677780,
+ 22662365,
+ 2674234,
+ 45598081,
+ 25873917,
+ 2713462,
+ 153403524,
+ 82995088,
+ 24501530,
+ 4197776,
+ 19576783,
+ 17155814,
+ 22454239,
+ 62806748,
+ 80908147,
+ 3389578,
+ 18701257
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 42.129,
+ 74.795,
+ 62.013,
+ 56.752,
+ 72.028,
+ 81.495,
+ 62.879,
+ 68.588,
+ 69.451,
+ 57.046,
+ 79.696,
+ 82,
+ 71.263,
+ 66.662,
+ 77.045,
+ 76.904,
+ 71.028,
+ 73.044,
+ 65.033,
+ 59.908,
+ 61.34,
+ 74.193,
+ 63.61,
+ 70.303,
+ 71.626,
+ 78.77,
+ 70.815,
+ 73.053,
+ 76.99,
+ 68.564,
+ 73.017,
+ 72.37,
+ 60.308
+ ],
+ "y":[
+ 726.7340548,
+ 23403.55927,
+ 1136.39043,
+ 896.2260153,
+ 3119.280896,
+ 30209.01516,
+ 1746.769454,
+ 2873.91287,
+ 9240.761975,
+ 4390.717312,
+ 21905.59514,
+ 28604.5919,
+ 3844.917194,
+ 1646.758151,
+ 19233.98818,
+ 35110.10566,
+ 9313.93883,
+ 10206.97794,
+ 2140.739323,
+ 611,
+ 1057.206311,
+ 19774.83687,
+ 2092.712441,
+ 2650.921068,
+ 19014.54118,
+ 36023.1054,
+ 3015.378833,
+ 4090.925331,
+ 23235.42329,
+ 5913.187529,
+ 1764.456677,
+ 4515.487575,
+ 2234.820827
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 3508512,
+ 8148312,
+ 10311970,
+ 4165416,
+ 7661799,
+ 4481020,
+ 10256295,
+ 5374693,
+ 5193039,
+ 59925035,
+ 82350671,
+ 10603863,
+ 10083313,
+ 288030,
+ 3879155,
+ 57926999,
+ 720230,
+ 16122830,
+ 4535591,
+ 38625976,
+ 10433867,
+ 22404337,
+ 10111559,
+ 5410052,
+ 2011497,
+ 40152517,
+ 8954175,
+ 7361757,
+ 67308928,
+ 59912431
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 75.651,
+ 78.98,
+ 78.32,
+ 74.09,
+ 72.14,
+ 74.876,
+ 75.51,
+ 77.18,
+ 78.37,
+ 79.59,
+ 78.67,
+ 78.256,
+ 72.59,
+ 80.5,
+ 77.783,
+ 80.24,
+ 73.981,
+ 78.53,
+ 79.05,
+ 74.67,
+ 77.29,
+ 71.322,
+ 73.213,
+ 73.8,
+ 76.66,
+ 79.78,
+ 80.04,
+ 80.62,
+ 70.845,
+ 78.471
+ ],
+ "y":[
+ 4604.211737,
+ 32417.60769,
+ 30485.88375,
+ 6018.975239,
+ 7696.777725,
+ 11628.38895,
+ 17596.21022,
+ 32166.50006,
+ 28204.59057,
+ 28926.03234,
+ 30035.80198,
+ 22514.2548,
+ 14843.93556,
+ 31163.20196,
+ 34077.04939,
+ 27968.09817,
+ 6557.194282,
+ 33724.75778,
+ 44683.97525,
+ 12002.23908,
+ 19970.90787,
+ 7885.360081,
+ 7236.075251,
+ 13638.77837,
+ 20660.01936,
+ 24835.47166,
+ 29341.63093,
+ 34480.95771,
+ 6508.085718,
+ 29478.99919
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 31287142,
+ 10866106,
+ 7026113,
+ 1630347,
+ 12251209,
+ 7021078,
+ 15929988,
+ 4048013,
+ 8835739,
+ 614382,
+ 55379852,
+ 3328795,
+ 16252726,
+ 447416,
+ 73312559,
+ 495627,
+ 4414865,
+ 67946797,
+ 1299304,
+ 1457766,
+ 20550751,
+ 8807818,
+ 1332459,
+ 31386842,
+ 2046772,
+ 2814651,
+ 5368585,
+ 16473477,
+ 11824495,
+ 10580176,
+ 2828858,
+ 1200206,
+ 31167783,
+ 18473780,
+ 1972153,
+ 11140655,
+ 119901274,
+ 743981,
+ 7852401,
+ 170372,
+ 10870037,
+ 5359092,
+ 7753310,
+ 44433622,
+ 37090298,
+ 1130269,
+ 34593779,
+ 4977378,
+ 9770575,
+ 24739869,
+ 10595811,
+ 11926563
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 70.994,
+ 41.003,
+ 54.406,
+ 46.634,
+ 50.65,
+ 47.36,
+ 49.856,
+ 43.308,
+ 50.525,
+ 62.974,
+ 44.966,
+ 52.97,
+ 46.832,
+ 53.373,
+ 69.806,
+ 49.348,
+ 55.24,
+ 50.725,
+ 56.761,
+ 58.041,
+ 58.453,
+ 53.676,
+ 45.504,
+ 50.992,
+ 44.593,
+ 43.753,
+ 72.737,
+ 57.286,
+ 45.009,
+ 51.818,
+ 62.247,
+ 71.954,
+ 69.615,
+ 44.026,
+ 51.479,
+ 54.496,
+ 46.608,
+ 75.744,
+ 43.413,
+ 64.337,
+ 61.6,
+ 41.012,
+ 45.936,
+ 53.365,
+ 56.369,
+ 43.869,
+ 49.651,
+ 57.561,
+ 73.042,
+ 47.813,
+ 39.193,
+ 39.989
+ ],
+ "y":[
+ 5288.040382,
+ 2773.287312,
+ 1372.877931,
+ 11003.60508,
+ 1037.645221,
+ 446.4035126,
+ 1934.011449,
+ 738.6906068,
+ 1156.18186,
+ 1075.811558,
+ 241.1658765,
+ 3484.06197,
+ 1648.800823,
+ 1908.260867,
+ 4754.604414,
+ 7703.4959,
+ 765.3500015,
+ 530.0535319,
+ 12521.71392,
+ 660.5855997,
+ 1111.984578,
+ 945.5835837,
+ 575.7047176,
+ 1287.514732,
+ 1275.184575,
+ 531.4823679,
+ 9534.677467,
+ 894.6370822,
+ 665.4231186,
+ 951.4097518,
+ 1579.019543,
+ 9021.815894,
+ 3258.495584,
+ 633.6179466,
+ 4072.324751,
+ 601.0745012,
+ 1615.286395,
+ 6316.1652,
+ 785.6537648,
+ 1353.09239,
+ 1519.635262,
+ 699.489713,
+ 882.0818218,
+ 7710.946444,
+ 1993.398314,
+ 4128.116943,
+ 899.0742111,
+ 886.2205765,
+ 5722.895655,
+ 927.7210018,
+ 1071.613938,
+ 672.0386227
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 38331121,
+ 8445134,
+ 179914212,
+ 31902268,
+ 15497046,
+ 41008227,
+ 3834934,
+ 11226999,
+ 8650322,
+ 12921234,
+ 6353681,
+ 11178650,
+ 7607651,
+ 6677328,
+ 2664659,
+ 102479927,
+ 5146848,
+ 2990875,
+ 5884491,
+ 26769436,
+ 3859606,
+ 1101832,
+ 287675526,
+ 3363085,
+ 24287670
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 74.34,
+ 63.883,
+ 71.006,
+ 79.77,
+ 77.86,
+ 71.682,
+ 78.123,
+ 77.158,
+ 70.847,
+ 74.173,
+ 70.734,
+ 68.978,
+ 58.137,
+ 68.565,
+ 72.047,
+ 74.902,
+ 70.836,
+ 74.712,
+ 70.755,
+ 69.906,
+ 77.778,
+ 68.976,
+ 77.31,
+ 75.307,
+ 72.766
+ ],
+ "y":[
+ 8797.640716,
+ 3413.26269,
+ 8131.212843,
+ 33328.96507,
+ 10778.78385,
+ 5755.259962,
+ 7723.447195,
+ 6340.646683,
+ 4563.808154,
+ 5773.044512,
+ 5351.568666,
+ 4858.347495,
+ 1270.364932,
+ 3099.72866,
+ 6994.774861,
+ 10742.44053,
+ 2474.548819,
+ 7356.031934,
+ 3783.674243,
+ 5909.020073,
+ 18855.60618,
+ 11460.60023,
+ 39097.09955,
+ 7727.002004,
+ 8605.047831
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 19546792,
+ 3908037
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 80.37,
+ 79.11
+ ],
+ "y":[
+ 30687.75473,
+ 23189.80135
+ ]
+ }
+ ],
+ "name":"2002"
+ },
+ {
+ "data":[
+ {
+ "name":"Asia",
+ "text":[
+ "Afghanistan",
+ "Bahrain",
+ "Bangladesh",
+ "Cambodia",
+ "China",
+ "Hong Kong, China",
+ "India",
+ "Indonesia",
+ "Iran",
+ "Iraq",
+ "Israel",
+ "Japan",
+ "Jordan",
+ "Korea, Dem. Rep.",
+ "Korea, Rep.",
+ "Kuwait",
+ "Lebanon",
+ "Malaysia",
+ "Mongolia",
+ "Myanmar",
+ "Nepal",
+ "Oman",
+ "Pakistan",
+ "Philippines",
+ "Saudi Arabia",
+ "Singapore",
+ "Sri Lanka",
+ "Syria",
+ "Taiwan",
+ "Thailand",
+ "Vietnam",
+ "West Bank and Gaza",
+ "Yemen, Rep."
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 31889923,
+ 708573,
+ 150448339,
+ 14131858,
+ 1318683096,
+ 6980412,
+ 1110396331,
+ 223547000,
+ 69453570,
+ 27499638,
+ 6426679,
+ 127467972,
+ 6053193,
+ 23301725,
+ 49044790,
+ 2505559,
+ 3921278,
+ 24821286,
+ 2874127,
+ 47761980,
+ 28901790,
+ 3204897,
+ 169270617,
+ 91077287,
+ 27601038,
+ 4553009,
+ 20378239,
+ 19314747,
+ 23174294,
+ 65068149,
+ 85262356,
+ 4018332,
+ 22211743
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 43.828,
+ 75.635,
+ 64.062,
+ 59.723,
+ 72.961,
+ 82.208,
+ 64.698,
+ 70.65,
+ 70.964,
+ 59.545,
+ 80.745,
+ 82.603,
+ 72.535,
+ 67.297,
+ 78.623,
+ 77.588,
+ 71.993,
+ 74.241,
+ 66.803,
+ 62.069,
+ 63.785,
+ 75.64,
+ 65.483,
+ 71.688,
+ 72.777,
+ 79.972,
+ 72.396,
+ 74.143,
+ 78.4,
+ 70.616,
+ 74.249,
+ 73.422,
+ 62.698
+ ],
+ "y":[
+ 974.5803384,
+ 29796.04834,
+ 1391.253792,
+ 1713.778686,
+ 4959.114854,
+ 39724.97867,
+ 2452.210407,
+ 3540.651564,
+ 11605.71449,
+ 4471.061906,
+ 25523.2771,
+ 31656.06806,
+ 4519.461171,
+ 1593.06548,
+ 23348.13973,
+ 47306.98978,
+ 10461.05868,
+ 12451.6558,
+ 3095.772271,
+ 944,
+ 1091.359778,
+ 22316.19287,
+ 2605.94758,
+ 3190.481016,
+ 21654.83194,
+ 47143.17964,
+ 3970.095407,
+ 4184.548089,
+ 28718.27684,
+ 7458.396327,
+ 2441.576404,
+ 3025.349798,
+ 2280.769906
+ ]
+ },
+ {
+ "name":"Europe",
+ "text":[
+ "Albania",
+ "Austria",
+ "Belgium",
+ "Bosnia and Herzegovina",
+ "Bulgaria",
+ "Croatia",
+ "Czech Republic",
+ "Denmark",
+ "Finland",
+ "France",
+ "Germany",
+ "Greece",
+ "Hungary",
+ "Iceland",
+ "Ireland",
+ "Italy",
+ "Montenegro",
+ "Netherlands",
+ "Norway",
+ "Poland",
+ "Portugal",
+ "Romania",
+ "Serbia",
+ "Slovak Republic",
+ "Slovenia",
+ "Spain",
+ "Sweden",
+ "Switzerland",
+ "Turkey",
+ "United Kingdom"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 3600523,
+ 8199783,
+ 10392226,
+ 4552198,
+ 7322858,
+ 4493312,
+ 10228744,
+ 5468120,
+ 5238460,
+ 61083916,
+ 82400996,
+ 10706290,
+ 9956108,
+ 301931,
+ 4109086,
+ 58147733,
+ 684736,
+ 16570613,
+ 4627926,
+ 38518241,
+ 10642836,
+ 22276056,
+ 10150265,
+ 5447502,
+ 2009245,
+ 40448191,
+ 9031088,
+ 7554661,
+ 71158647,
+ 60776238
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 76.423,
+ 79.829,
+ 79.441,
+ 74.852,
+ 73.005,
+ 75.748,
+ 76.486,
+ 78.332,
+ 79.313,
+ 80.657,
+ 79.406,
+ 79.483,
+ 73.338,
+ 81.757,
+ 78.885,
+ 80.546,
+ 74.543,
+ 79.762,
+ 80.196,
+ 75.563,
+ 78.098,
+ 72.476,
+ 74.002,
+ 74.663,
+ 77.926,
+ 80.941,
+ 80.884,
+ 81.701,
+ 71.777,
+ 79.425
+ ],
+ "y":[
+ 5937.029526,
+ 36126.4927,
+ 33692.60508,
+ 7446.298803,
+ 10680.79282,
+ 14619.22272,
+ 22833.30851,
+ 35278.41874,
+ 33207.0844,
+ 30470.0167,
+ 32170.37442,
+ 27538.41188,
+ 18008.94444,
+ 36180.78919,
+ 40675.99635,
+ 28569.7197,
+ 9253.896111,
+ 36797.93332,
+ 49357.19017,
+ 15389.92468,
+ 20509.64777,
+ 10808.47561,
+ 9786.534714,
+ 18678.31435,
+ 25768.25759,
+ 28821.0637,
+ 33859.74835,
+ 37506.41907,
+ 8458.276384,
+ 33203.26128
+ ]
+ },
+ {
+ "name":"Africa",
+ "text":[
+ "Algeria",
+ "Angola",
+ "Benin",
+ "Botswana",
+ "Burkina Faso",
+ "Burundi",
+ "Cameroon",
+ "Central African Republic",
+ "Chad",
+ "Comoros",
+ "Congo, Dem. Rep.",
+ "Congo, Rep.",
+ "Cote d'Ivoire",
+ "Djibouti",
+ "Egypt",
+ "Equatorial Guinea",
+ "Eritrea",
+ "Ethiopia",
+ "Gabon",
+ "Gambia",
+ "Ghana",
+ "Guinea",
+ "Guinea-Bissau",
+ "Kenya",
+ "Lesotho",
+ "Liberia",
+ "Libya",
+ "Madagascar",
+ "Malawi",
+ "Mali",
+ "Mauritania",
+ "Mauritius",
+ "Morocco",
+ "Mozambique",
+ "Namibia",
+ "Niger",
+ "Nigeria",
+ "Reunion",
+ "Rwanda",
+ "Sao Tome and Principe",
+ "Senegal",
+ "Sierra Leone",
+ "Somalia",
+ "South Africa",
+ "Sudan",
+ "Swaziland",
+ "Tanzania",
+ "Togo",
+ "Tunisia",
+ "Uganda",
+ "Zambia",
+ "Zimbabwe"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 33333216,
+ 12420476,
+ 8078314,
+ 1639131,
+ 14326203,
+ 8390505,
+ 17696293,
+ 4369038,
+ 10238807,
+ 710960,
+ 64606759,
+ 3800610,
+ 18013409,
+ 496374,
+ 80264543,
+ 551201,
+ 4906585,
+ 76511887,
+ 1454867,
+ 1688359,
+ 22873338,
+ 9947814,
+ 1472041,
+ 35610177,
+ 2012649,
+ 3193942,
+ 6036914,
+ 19167654,
+ 13327079,
+ 12031795,
+ 3270065,
+ 1250882,
+ 33757175,
+ 19951656,
+ 2055080,
+ 12894865,
+ 135031164,
+ 798094,
+ 8860588,
+ 199579,
+ 12267493,
+ 6144562,
+ 9118773,
+ 43997828,
+ 42292929,
+ 1133066,
+ 38139640,
+ 5701579,
+ 10276158,
+ 29170398,
+ 11746035,
+ 12311143
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 72.301,
+ 42.731,
+ 56.728,
+ 50.728,
+ 52.295,
+ 49.58,
+ 50.43,
+ 44.741,
+ 50.651,
+ 65.152,
+ 46.462,
+ 55.322,
+ 48.328,
+ 54.791,
+ 71.338,
+ 51.579,
+ 58.04,
+ 52.947,
+ 56.735,
+ 59.448,
+ 60.022,
+ 56.007,
+ 46.388,
+ 54.11,
+ 42.592,
+ 45.678,
+ 73.952,
+ 59.443,
+ 48.303,
+ 54.467,
+ 64.164,
+ 72.801,
+ 71.164,
+ 42.082,
+ 52.906,
+ 56.867,
+ 46.859,
+ 76.442,
+ 46.242,
+ 65.528,
+ 63.062,
+ 42.568,
+ 48.159,
+ 49.339,
+ 58.556,
+ 39.613,
+ 52.517,
+ 58.42,
+ 73.923,
+ 51.542,
+ 42.384,
+ 43.487
+ ],
+ "y":[
+ 6223.367465,
+ 4797.231267,
+ 1441.284873,
+ 12569.85177,
+ 1217.032994,
+ 430.0706916,
+ 2042.09524,
+ 706.016537,
+ 1704.063724,
+ 986.1478792,
+ 277.5518587,
+ 3632.557798,
+ 1544.750112,
+ 2082.481567,
+ 5581.180998,
+ 12154.08975,
+ 641.3695236,
+ 690.8055759,
+ 13206.48452,
+ 752.7497265,
+ 1327.60891,
+ 942.6542111,
+ 579.231743,
+ 1463.249282,
+ 1569.331442,
+ 414.5073415,
+ 12057.49928,
+ 1044.770126,
+ 759.3499101,
+ 1042.581557,
+ 1803.151496,
+ 10956.99112,
+ 3820.17523,
+ 823.6856205,
+ 4811.060429,
+ 619.6768924,
+ 2013.977305,
+ 7670.122558,
+ 863.0884639,
+ 1598.435089,
+ 1712.472136,
+ 862.5407561,
+ 926.1410683,
+ 9269.657808,
+ 2602.394995,
+ 4513.480643,
+ 1107.482182,
+ 882.9699438,
+ 7092.923025,
+ 1056.380121,
+ 1271.211593,
+ 469.7092981
+ ]
+ },
+ {
+ "name":"Americas",
+ "text":[
+ "Argentina",
+ "Bolivia",
+ "Brazil",
+ "Canada",
+ "Chile",
+ "Colombia",
+ "Costa Rica",
+ "Cuba",
+ "Dominican Republic",
+ "Ecuador",
+ "El Salvador",
+ "Guatemala",
+ "Haiti",
+ "Honduras",
+ "Jamaica",
+ "Mexico",
+ "Nicaragua",
+ "Panama",
+ "Paraguay",
+ "Peru",
+ "Puerto Rico",
+ "Trinidad and Tobago",
+ "United States",
+ "Uruguay",
+ "Venezuela"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 40301927,
+ 9119152,
+ 190010647,
+ 33390141,
+ 16284741,
+ 44227550,
+ 4133884,
+ 11416987,
+ 9319622,
+ 13755680,
+ 6939688,
+ 12572928,
+ 8502814,
+ 7483763,
+ 2780132,
+ 108700891,
+ 5675356,
+ 3242173,
+ 6667147,
+ 28674757,
+ 3942491,
+ 1056608,
+ 301139947,
+ 3447496,
+ 26084662
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 75.32,
+ 65.554,
+ 72.39,
+ 80.653,
+ 78.553,
+ 72.889,
+ 78.782,
+ 78.273,
+ 72.235,
+ 74.994,
+ 71.878,
+ 70.259,
+ 60.916,
+ 70.198,
+ 72.567,
+ 76.195,
+ 72.899,
+ 75.537,
+ 71.752,
+ 71.421,
+ 78.746,
+ 69.819,
+ 78.242,
+ 76.384,
+ 73.747
+ ],
+ "y":[
+ 12779.37964,
+ 3822.137084,
+ 9065.800825,
+ 36319.23501,
+ 13171.63885,
+ 7006.580419,
+ 9645.06142,
+ 8948.102923,
+ 6025.374752,
+ 6873.262326,
+ 5728.353514,
+ 5186.050003,
+ 1201.637154,
+ 3548.330846,
+ 7320.880262,
+ 11977.57496,
+ 2749.320965,
+ 9809.185636,
+ 4172.838464,
+ 7408.905561,
+ 19328.70901,
+ 18008.50924,
+ 42951.65309,
+ 10611.46299,
+ 11415.80569
+ ]
+ },
+ {
+ "name":"Oceania",
+ "text":[
+ "Australia",
+ "New Zealand"
+ ],
+ "marker":{
+ "sizemode":"area",
+ "sizeref":200000,
+ "size":[
+ 20434176,
+ 4115771
+ ]
+ },
+ "mode":"markers",
+ "x":[
+ 81.235,
+ 80.204
+ ],
+ "y":[
+ 34435.36744,
+ 25185.00911
+ ]
+ }
+ ],
+ "name":"2007"
+ }
+ ],
+ "layout":{
+ "xaxis":{
+ "title":"Life Expectancy",
+ "range":[
+ 30,
+ 85
+ ]
+ },
+ "yaxis":{
+ "title":"GDP per Capita",
+ "type":"log"
+ },
+ "hovermode":"closest",
+ "slider":{
+ "visible":true,
+ "plotlycommand":"animate",
+ "args":[
+ "slider.value",
+ {
+ "duration":400,
+ "ease":"cubic-in-out"
+ }
+ ],
+ "initialValue":"1952",
+ "values":[
+ "1952",
+ "1957",
+ "1962",
+ "1967",
+ "1972",
+ "1977",
+ "1982",
+ "1987",
+ "1992",
+ "1997",
+ "2002",
+ "2007"
+ ]
+ },
+ "updatemenus": [{
+ "x": 0.1,
+ "y": 0,
+ "yanchor": "top",
+ "xanchor": "right",
+ "showactive": false,
+ "direction": "left",
+ "type": "buttons",
+ "pad": {"t": 87, "r": 10},
+ "buttons": [{
+ "method": "animate",
+ "args": [null, {
+ "fromcurrent": true,
+ "transition": {
+ "duration": 300,
+ "easing": "quadratic-in-out"
+ },
+ "frame": {
+ "duration": 500,
+ "redraw": false
+ }
+ }],
+ "label": "Play"
+ }, {
+ "method": "animate",
+ "args": [
+ [null],
+ {
+ "mode": "immediate",
+ "transition": {
+ "duration": 0
+ },
+ "frame": {
+ "duration": 0,
+ "redraw": false
+ }
+ }
+ ],
+ "label": "Pause"
+ }]
+ }],
+ "sliders": [{
+ "active": 0,
+ "steps": [{
+ "label": "1952",
+ "method": "animate",
+ "args": [["1952"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1957",
+ "method": "animate",
+ "args": [["1957"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1962",
+ "method": "animate",
+ "args": [["1962"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1967",
+ "method": "animate",
+ "args": [["1967"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1972",
+ "method": "animate",
+ "args": [["1972"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1977",
+ "method": "animate",
+ "args": [["1977"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1982",
+ "method": "animate",
+ "args": [["1982"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1987",
+ "method": "animate",
+ "args": [["1987"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1992",
+ "method": "animate",
+ "args": [["1992"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "1997",
+ "method": "animate",
+ "args": [["1997"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "2002",
+ "method": "animate",
+ "args": [["2002"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }, {
+ "label": "2007",
+ "method": "animate",
+ "args": [["2007"], {
+ "mode": "immediate",
+ "transition": {"duration": 300},
+ "frame": {"duration": 300, "redraw": false}
+ }
+ ]
+ }],
+ "x": 0.1,
+ "len": 0.9,
+ "xanchor": "left",
+ "y": 0,
+ "yanchor": "top",
+ "pad": {"t": 50, "b": 10},
+ "currentvalue": {
+ "visible": true,
+ "prefix": "Year:",
+ "xanchor": "right",
+ "font": {
+ "size": 20,
+ "color": "#666"
+ }
+ },
+ "transition": {
+ "duration": 300,
+ "easing": "cubic-in-out"
+ }
+ }]
+ },
+ "config": {
+ "scrollzoom": true
+ }
+}
diff --git a/content/plotly_js/animations/animations_plotly_js_index.html b/content/plotly_js/animations/animations_plotly_js_index.html
new file mode 100644
index 00000000000..77c1ea97b60
--- /dev/null
+++ b/content/plotly_js/animations/animations_plotly_js_index.html
@@ -0,0 +1,13 @@
+---
+name: Animations
+permalink: javascript/animations/
+description: How to animate charts in JavaScript with the animate API.
+layout: base
+thumbnail: thumbnail/animations.gif
+language: plotly_js
+page_type: example_index
+display_as: animations
+order: 1
+---
+{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","animations" | sort: "order" %}
+{% include posts/auto_examples.html examples=examples %}
diff --git a/content/plotly_js/animations/filled-area-animations/filled-area-animations.html b/content/plotly_js/animations/filled-area-animations/filled-area-animations.html
new file mode 100644
index 00000000000..7b085e4b219
--- /dev/null
+++ b/content/plotly_js/animations/filled-area-animations/filled-area-animations.html
@@ -0,0 +1,96 @@
+---
+name: Filled-Area-Animation
+plot_url: https://codepen.io/bcd/embed/ayVXvY/?height=500&theme-id=15263&default-tab=result
+language: plotly_js
+suite: filled-area-animations
+order: 1
+sitemap: false
+arrangement: horizontal
+---
+
+d3.csv("https://raw.githubusercontent.com/plotly/datasets/master/2014_apple_stock.csv", function(err, rows){
+
+ function unpack(rows, key) {
+ return rows.map(function(row) { return row[key]; });
+}
+
+ var frames = []
+ var x = unpack(rows, 'AAPL_x')
+ var y = unpack(rows, 'AAPL_y')
+
+ var n = 100;
+ for (var i = 0; i < n; i++) {
+ frames[i] = {data: [{x: [], y: []}]}
+ frames[i].data[0].x = x.slice(0, i+1);
+ frames[i].data[0].y = y.slice(0, i+1);
+ }
+
+ Plotly.newPlot('myDiv', [{
+ x: frames[1].data[0].x,
+ y: frames[1].data[0].y,
+ fill: 'tozeroy',
+ type: 'scatter',
+ mode: 'lines',
+ line: {color: 'green'}
+ }], {
+ title: {
+ text: "Filled-Area Animation"
+ },
+ xaxis: {
+ type: 'date',
+ range: [
+ frames[99].data[0].x[0],
+ frames[99].data[0].x[99]
+ ]
+ },
+ yaxis: {
+ range: [
+ 0,
+ 90
+ ]
+ },
+ updatemenus: [{
+ x: 0.1,
+ y: 0,
+ yanchor: "top",
+ xanchor: "right",
+ showactive: false,
+ direction: "left",
+ type: "buttons",
+ pad: {"t": 87, "r": 10},
+ buttons: [{
+ method: "animate",
+ args: [null, {
+ fromcurrent: true,
+ transition: {
+ duration: 0,
+ },
+ frame: {
+ duration: 40,
+ redraw: false
+ }
+ }],
+ label: "Play"
+ }, {
+ method: "animate",
+ args: [
+ [null],
+ {
+ mode: "immediate",
+ transition: {
+ duration: 0
+ },
+ frame: {
+ duration: 0,
+ redraw: false
+ }
+ }
+ ],
+ label: "Pause"
+ }]
+ }]
+ }).then(function() {
+ Plotly.addFrames('myDiv', frames);
+ });
+
+})
diff --git a/content/plotly_js/animations/filled-area-animations/multiple-filled-area-animations.html b/content/plotly_js/animations/filled-area-animations/multiple-filled-area-animations.html
new file mode 100644
index 00000000000..848164df064
--- /dev/null
+++ b/content/plotly_js/animations/filled-area-animations/multiple-filled-area-animations.html
@@ -0,0 +1,116 @@
+---
+name: Multiple Trace Filled-Area
+plot_url: https://codepen.io/bcd/embed/BdJXpP/?height=500&theme-id=15263&default-tab=result
+language: plotly_js
+suite: filled-area-animations
+order: 2
+sitemap: false
+arrangement: horizontal
+---
+
+d3.csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv", function(err, rows){
+
+ function unpack(rows, key) {
+ return rows.map(function(row) { return row[key]; });
+}
+
+ var frames = []
+ var x = unpack(rows, 'Date')
+ var y = unpack(rows, 'AAPL.High')
+ var x2 = unpack(rows, 'Date')
+ var y2 = unpack(rows, 'AAPL.Low')
+
+ var n = 100;
+ for (var i = 0; i < n; i++) {
+ frames[i] = {data: [{x: [], y: []}, {x: [], y: []}]}
+ frames[i].data[1].x = x.slice(0, i+1);
+ frames[i].data[1].y = y.slice(0, i+1);
+ frames[i].data[0].x = x2.slice(0, i+1);
+ frames[i].data[0].y = y2.slice(0, i+1);
+ }
+
+ var trace2 = {
+ type: "scatter",
+ mode: "lines",
+ name: 'AAPL High',
+ fill: 'tonexty',
+ x: frames[5].data[1].x,
+ y: frames[5].data[1].y,
+ line: {color: 'grey'}
+ }
+
+ var trace1 = {
+ type: "scatter",
+ mode: "lines",
+ name: 'AAPL Low',
+ x: frames[5].data[0].x,
+ y: frames[5].data[0].y,
+ line: {color: 'lightgrey'}
+ }
+
+ var data = [trace1,trace2];
+
+ var layout = {
+ title: {
+ text: 'Multiple Trace Filled-Area Animation'
+ },
+ xaxis: {
+ range: [frames[99].data[0].x[0], frames[99].data[0].x[99]],
+ showgrid: false
+ },
+ yaxis: {
+ range: [120, 140],
+ showgrid: false
+ },
+ legend: {
+ orientation: 'h',
+ x: 0.5,
+ y: 1.2,
+ xanchor: 'center'
+ },
+ updatemenus: [{
+ x: 0.5,
+ y: 0,
+ yanchor: "top",
+ xanchor: "center",
+ showactive: false,
+ direction: "left",
+ type: "buttons",
+ pad: {"t": 87, "r": 10},
+ buttons: [{
+ method: "animate",
+ args: [null, {
+ fromcurrent: true,
+ transition: {
+ duration: 0,
+ },
+ frame: {
+ duration: 40,
+ redraw: false
+ }
+ }],
+ label: "Play"
+ }, {
+ method: "animate",
+ args: [
+ [null],
+ {
+ mode: "immediate",
+ transition: {
+ duration: 0
+ },
+ frame: {
+ duration: 0,
+ redraw: false
+ }
+ }
+ ],
+ label: "Pause"
+ }]
+ }]
+ };
+
+ Plotly.newPlot('myDiv', data, layout).then(function() {
+ Plotly.addFrames('myDiv', frames);
+ });
+})
diff --git a/content/plotly_js/animations/map-animations/choropleth-animation.html b/content/plotly_js/animations/map-animations/choropleth-animation.html
new file mode 100644
index 00000000000..552dff20a5b
--- /dev/null
+++ b/content/plotly_js/animations/map-animations/choropleth-animation.html
@@ -0,0 +1,130 @@
+---
+name: Map Animations
+language: plotly_js
+suite: map-animations
+order: 1
+sitemap: false
+arrangement: horizontal
+---
+
+d3.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminder_with_codes.csv", function(err, rows){
+
+ function filter_and_unpack(rows, key, year) {
+ return rows.filter(row => row['year'] == year).map(row => row[key])
+ }
+
+ var frames = []
+ var slider_steps = []
+
+ var n = 11;
+ var num = 1952;
+ for (var i = 0; i <= n; i++) {
+ var z = filter_and_unpack(rows, 'lifeExp', num)
+ var locations = filter_and_unpack(rows, 'iso_alpha', num)
+ frames[i] = {data: [{z: z, locations: locations, text: locations}], name: num}
+ slider_steps.push ({
+ label: num.toString(),
+ method: "animate",
+ args: [[num], {
+ mode: "immediate",
+ transition: {duration: 300},
+ frame: {duration: 300}
+ }
+ ]
+ })
+ num = num + 5
+ }
+
+var data = [{
+ type: 'choropleth',
+ locationmode: 'world',
+ locations: frames[0].data[0].locations,
+ z: frames[0].data[0].z,
+ text: frames[0].data[0].locations,
+ zauto: false,
+ zmin: 30,
+ zmax: 90
+
+}];
+var layout = {
+ title: {
+ text: 'World Life Expectency+Most browsers have a limit of between 8 and 16 WebGL contexts per page. A Plotly WebGL-based figure may use multiple WebGL contexts, but generally you'll be able to render between 4 and 8 figures on one page. + +If you exceed the browser limit on WebGL contexts, some figures won't render and you'll see an error. In the console in Chrome, for example, you'll see the error: "Too many active WebGL contexts. Oldest context will be lost". + +If you encounter WebGL context limits when using WebGL-based figures, you can use [Virtual WebGL](https://github.com/greggman/virtual-webgl), which virtualizes a single WebGL context into multiple contexts. + +To use it, add the following script on your page: +
<script src="https://unpkg.com/virtual-webgl@1.0.6/src/virtual-webgl.js"></script>+ +
{{page.description}}
+ {% include layouts/dashplug.html %} +{{page.description}}
+ {% include layouts/dashplug.html %} +{{page.description}}
+ {% include layouts/dashplug.html %} +{{page.description}}
+ {% include layouts/dashplug.html %} +nonnegative, tozero, and normal Rangemode
+language: plotly_js
+suite: axes
+order: 2
+sitemap: false
+arrangement: horizontal
+---
+var data = [
+ {
+ x: [2, 4, 6],
+ y: [-3, 0, 3],
+ type: 'scatter'
+ }
+];
+var layout = {
+ showlegend: false,
+ xaxis: {
+ rangemode: 'tozero',
+ autorange: true
+ },
+ yaxis: {
+ rangemode: 'nonnegative',
+ autorange: true
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/axes/axes-range-type.html b/content/plotly_js/fundamentals/axes/axes-range-type.html
new file mode 100644
index 00000000000..0a8c782b78b
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/axes-range-type.html
@@ -0,0 +1,30 @@
+---
+name: Logarithmic Axes
+language: plotly_js
+suite: axes
+order: 3
+sitemap: false
+arrangement: horizontal
+---
+var trace1 = {
+ x: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ y: [8, 7, 6, 5, 4, 3, 2, 1, 0],
+ type: 'scatter'
+};
+var trace2 = {
+ x: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ y: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ type: 'scatter'
+};
+var data = [trace1, trace2];
+var layout = {
+ xaxis: {
+ type: 'log',
+ autorange: true
+ },
+ yaxis: {
+ type: 'log',
+ autorange: true
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/axes/axes-reversed-with-min-max.html b/content/plotly_js/fundamentals/axes/axes-reversed-with-min-max.html
new file mode 100644
index 00000000000..73601c47bf2
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/axes-reversed-with-min-max.html
@@ -0,0 +1,25 @@
+---
+name: Reversed Axes with Range ( Min/Max ) Specified
+language: plotly_js
+suite: axes
+order: 5
+sitemap: false
+arrangement: horizontal
+---
+
+var data = [
+ {
+ x: [0.0, 0.1, 0.2, 0.3, 0.4, 0.51, 0.61, 0.71, 0.81, 0.91, 1.01, 1.11, 1.21, 1.31, 1.41, 1.52, 1.62, 1.72, 1.82, 1.92, 2.02, 2.12, 2.22, 2.32, 2.42, 2.53, 2.63, 2.73, 2.83, 2.93, 3.03, 3.13, 3.23, 3.33, 3.43, 3.54, 3.64, 3.74, 3.84, 3.94, 4.04, 4.14, 4.24, 4.34, 4.44, 4.55, 4.65, 4.75, 4.85, 4.95, 5.05, 5.15, 5.25, 5.35, 5.45, 5.56, 5.66, 5.76, 5.86, 5.96, 6.06, 6.16, 6.26, 6.36, 6.46, 6.57, 6.67, 6.77, 6.87, 6.97, 7.07, 7.17, 7.27, 7.37, 7.47, 7.58, 7.68, 7.78, 7.88, 7.98, 8.08, 8.18, 8.28, 8.38, 8.48, 8.59, 8.69, 8.79, 8.89, 8.99, 9.09, 9.19, 9.29, 9.39, 9.49, 9.6, 9.7, 9.8, 9.9, 10.0],
+ y: [63, 65, 78, 92, 12, 50, 17, 31, 1, 25, 76, 66, 83, 38, 95, 23, 20, 88, 31, 26, 39, 74, 11, 84, 7, 13, 30, 85, 80, 47, 12, 89, 12, 35, 99, 78, 77, 56, 26, 13, 96, 55, 19, 88, 31, 1, 42, 39, 99, 62, 68, 61, 45, 44, 10, 25, 89, 82, 28, 2, 24, 1, 32, 16, 29, 40, 55, 75, 20, 41, 67, 33, 92, 14, 16, 22, 86, 55, 37, 42, 42, 85, 60, 11, 54, 3, 34, 29, 59, 28, 25, 67, 90, 10, 29, 16, 51, 17, 2, 34],
+ mode: "markers"
+ }
+];
+var layout = {
+ title: {
+ text: "Reversed Axis with Min/Max"
+ },
+ xaxis: {
+ range: [10, 0]
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/axes/axes-reversed.html b/content/plotly_js/fundamentals/axes/axes-reversed.html
new file mode 100644
index 00000000000..c1925f99037
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/axes-reversed.html
@@ -0,0 +1,17 @@
+---
+name: Reversed Axes
+language: plotly_js
+suite: axes
+order: 4
+sitemap: false
+arrangement: horizontal
+---
+var data = [
+ {
+ x: [1, 2],
+ y: [1, 2],
+ type: 'scatter'
+ }
+];
+var layout = {xaxis: {autorange: 'reversed'}};
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/axes/axes-ticks.html b/content/plotly_js/fundamentals/axes/axes-ticks.html
new file mode 100644
index 00000000000..3a0241c8ab7
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/axes-ticks.html
@@ -0,0 +1,40 @@
+---
+name: Tick Placement, Color, and Style
+language: plotly_js
+suite: axes
+order: 0
+sitemap: false
+arrangement: horizontal
+---
+var trace1 = {
+ x: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ y: [8, 7, 6, 5, 4, 3, 2, 1, 0],
+ type: 'scatter'
+};
+var trace2 = {
+ x: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ y: [0, 1, 2, 3, 4, 5, 6, 7, 8],
+ type: 'scatter'
+};
+var data = [trace1, trace2];
+var layout = {
+ xaxis: {
+ tickmode: 'linear',
+ ticks: 'outside',
+ tick0: 0,
+ dtick: 0.25,
+ ticklen: 8,
+ tickwidth: 4,
+ tickcolor: '#000'
+ },
+ yaxis: {
+ tickmode: 'linear',
+ ticks: 'outside',
+ tick0: 0,
+ dtick: 0.25,
+ ticklen: 8,
+ tickwidth: 4,
+ tickcolor: '#000'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/axes/axes_plotly_js_index.html b/content/plotly_js/fundamentals/axes/axes_plotly_js_index.html
new file mode 100644
index 00000000000..2b2c96adb86
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/axes_plotly_js_index.html
@@ -0,0 +1,17 @@
+---
+description: How to adjust axes properties in D3.js-based javascript charts. Seven
+ examples of linear and logarithmic axes, axes titles, and styling and coloring axes
+ and grid lines.
+display_as: file_settings
+language: plotly_js
+layout: base
+name: Axes
+order: 15
+page_type: u-guide
+permalink: javascript/axes/
+redirect_from: javascript-graphing-library/axes/
+thumbnail: thumbnail/axes.png
+---
+
+{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","axes" | sort: "order" %}
+{% include posts/auto_examples.html examples=examples %}
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/axes/b64-arrays.html b/content/plotly_js/fundamentals/axes/b64-arrays.html
new file mode 100644
index 00000000000..2357720a2d1
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/b64-arrays.html
@@ -0,0 +1,34 @@
+---
+name: Use Base64-Encoded Typed Arrays
+language: plotly_js
+suite: axes
+order: 11
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ Plotly.js 2.28.0 and later supports using base64-encoded typed arrays. To use a base64-encoded typed array, pass an object with the keys `bdata` (a base64-encoded string or the ArrayBuffer of an integer or float typed array) and `dtype` (the data type of the array, where the supported types are `float64`, `float32`, `int32`, `uint32`, `int16`, `uint16`, `int8`, `uint8`, and `uint8c`). You can also specify `shape` for multidimensional arrays. For example, `'4,10'` would be a 2D array with 4 rows and 10 columns.
+---
+var x = 'VVVVVVVV1b8AAAAAAAAAAFVVVVVVVdU/'
+var y = 'q6qqPquqqr4='
+var z = 'AABkAMgALAGQAfQB'
+
+var trace1 = {
+ x: {
+ bdata: x,
+ dtype: 'f8'
+ },
+ y: {
+ bdata: y,
+ dtype: 'f4'
+ },
+ z: {
+ bdata: z,
+ dtype: 'u2',
+ shape: '2,3'
+ },
+ type: 'surface'
+};
+
+var data = [trace1];
+
+Plotly.newPlot('myDiv', data);
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/axes/enumerated-ticks-with-tickvals-and-ticktext.html b/content/plotly_js/fundamentals/axes/enumerated-ticks-with-tickvals-and-ticktext.html
new file mode 100644
index 00000000000..32020def0e2
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/enumerated-ticks-with-tickvals-and-ticktext.html
@@ -0,0 +1,38 @@
+---
+name: Enumerated Ticks with Tickvals and Ticktext
+language: plotly_js
+suite: axes
+order: 2
+sitemap: false
+arrangement: horizontal
+---
+d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/stockdata.csv', function(err, rows){
+function unpack(rows, key) {
+ return rows.map(function(row)
+ { return row[key]; });}
+
+var trace1 = {
+ x:unpack(rows, 'Date'),
+ y: unpack(rows, 'IBM'),
+ mode: 'markers',
+ marker: {
+ size: 7,
+ line: {
+ width: 0.5},
+ opacity: 0.8},
+ type: 'scatter'
+};
+
+var layout = {
+ title: {
+ text: 'IBM Stock Data: Jan 2007 - Mar 2016'
+ },
+ xaxis: {
+ tickvals: ['2007-01-01', '2007-09-01', '2008-01-01', '2008-09-01', '2009-01-01', '2010-01-01', '2011-01-01', '2011-02-14', '2012-01-01', '2013-01-01', '2014-01-01', '2015-01-01', '2016-01-01'],
+ ticktext: ['2007', 'Financial Crisis Starts', '2008', 'Financial Crisis Ends', '2009', '2010', '2011', 'IBM wins Jeopardy!', '2012', '2013', '2014', '2015', '2016']
+ }
+};
+
+var data = [trace1];
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/axes/title_standoff.html b/content/plotly_js/fundamentals/axes/title_standoff.html
new file mode 100644
index 00000000000..7670557034f
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/title_standoff.html
@@ -0,0 +1,36 @@
+---
+name: Set Axis Title Position
+language: plotly_js
+suite: axes
+order: 3.5
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ This example sets `standoff` attribute to cartesian axes to determine the distance between the tick labels and the axis title.
+ Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value.
+ By setting standoff and turning [automargin](https://plotly.com/javascript/setting-graph-size/#automatically-adjust-margins) on, plotly.js will push the margins to fit the axis title at given standoff distance.
+---
+var data = [{
+ mode: "lines+markers",
+ x:["December", "January", "February"],
+ y:[4,1,3]
+ }]
+
+ var layout = {
+ margin: {t:0,r:0,b:0,l:20},
+ xaxis: {
+ automargin: true,
+ tickangle: 90,
+ title: {
+ text: "Month",
+ standoff: 20
+ }},
+ yaxis: {
+ automargin: true,
+ tickangle: 90,
+ title: {
+ text: "Temperature",
+ standoff: 40
+ }}}
+
+Plotly.newPlot('myDiv', data, layout)
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/axes/zeroline.html b/content/plotly_js/fundamentals/axes/zeroline.html
new file mode 100644
index 00000000000..3c7d8a25072
--- /dev/null
+++ b/content/plotly_js/fundamentals/axes/zeroline.html
@@ -0,0 +1,30 @@
+---
+name: Zero Line Layer
+language: plotly_js
+suite: axes
+order: 12
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ *New in 3.1*
+
+ By default, zero lines are displayed below traces. Set `zerolinelayer="above traces"` on an axis to display its zero line above traces.
+---
+var trace1 = {
+ x: ['A', 'B', 'C', 'D', 'A'],
+ y: [2, 0, 4, -3, 2],
+ fill: 'toself',
+ mode: 'none',
+ fillcolor: 'lightpink',
+ type: 'scatter'
+};
+
+var data = [trace1];
+
+var layout = {
+ yaxis: {
+ zerolinelayer: "above traces" // Change to "below traces" to see the difference
+ }
+};
+
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/colorscales/Blackbody-heatmap.html b/content/plotly_js/fundamentals/colorscales/Blackbody-heatmap.html
new file mode 100644
index 00000000000..793cf150233
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Blackbody-heatmap.html
@@ -0,0 +1,22 @@
+---
+name: Blackbody Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Blackbody',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Blackbody'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/Bluered-heatmap.html b/content/plotly_js/fundamentals/colorscales/Bluered-heatmap.html
new file mode 100644
index 00000000000..e754a1eca40
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Bluered-heatmap.html
@@ -0,0 +1,16 @@
+---
+name: Bluered Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Bluered',
+ type: 'heatmap'
+}];
+Plotly.newPlot('myDiv', data);
+ });
diff --git a/content/plotly_js/fundamentals/colorscales/Earth-heatmap.html b/content/plotly_js/fundamentals/colorscales/Earth-heatmap.html
new file mode 100644
index 00000000000..424fd581878
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Earth-heatmap.html
@@ -0,0 +1,17 @@
+---
+name: Earth Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Earth',
+ type: 'heatmap'
+}];
+Plotly.newPlot('myDiv', data);
+ });
diff --git a/content/plotly_js/fundamentals/colorscales/Electric-heatmap.html b/content/plotly_js/fundamentals/colorscales/Electric-heatmap.html
new file mode 100644
index 00000000000..5a316c6ae31
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Electric-heatmap.html
@@ -0,0 +1,16 @@
+---
+name: Electric Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Electric',
+ type: 'heatmap'
+}];
+Plotly.newPlot('myDiv', data);
+ });
diff --git a/content/plotly_js/fundamentals/colorscales/Greens-heatmap.html b/content/plotly_js/fundamentals/colorscales/Greens-heatmap.html
new file mode 100644
index 00000000000..b5ff8f2f913
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Greens-heatmap.html
@@ -0,0 +1,22 @@
+---
+name: Greens Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Greens',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Greens'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/Greys-heatmap.html b/content/plotly_js/fundamentals/colorscales/Greys-heatmap.html
new file mode 100644
index 00000000000..4470c4bc2d6
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Greys-heatmap.html
@@ -0,0 +1,22 @@
+---
+name: Greys Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Greys',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Greys'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/Hot-heatmap.html b/content/plotly_js/fundamentals/colorscales/Hot-heatmap.html
new file mode 100644
index 00000000000..671a98ee711
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Hot-heatmap.html
@@ -0,0 +1,17 @@
+---
+name: Hot Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Hot',
+ type: 'heatmap'
+}];
+Plotly.newPlot('myDiv', data);
+ });
diff --git a/content/plotly_js/fundamentals/colorscales/Jet-heatmap.html b/content/plotly_js/fundamentals/colorscales/Jet-heatmap.html
new file mode 100644
index 00000000000..f5cf906376a
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Jet-heatmap.html
@@ -0,0 +1,23 @@
+---
+name: Jet Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Jet',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Jet'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/Picnic-heatmap.html b/content/plotly_js/fundamentals/colorscales/Picnic-heatmap.html
new file mode 100644
index 00000000000..e4721eafc31
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Picnic-heatmap.html
@@ -0,0 +1,22 @@
+---
+name: Picnic Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Picnic',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Picnic'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/Portland-heatmap.html b/content/plotly_js/fundamentals/colorscales/Portland-heatmap.html
new file mode 100644
index 00000000000..f402d7a600a
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/Portland-heatmap.html
@@ -0,0 +1,23 @@
+---
+name: Portland Heatmap
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'Portland',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'Portland'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/RdBu-heatmap.html b/content/plotly_js/fundamentals/colorscales/RdBu-heatmap.html
new file mode 100644
index 00000000000..6fd7583f0a2
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/RdBu-heatmap.html
@@ -0,0 +1,23 @@
+---
+name: RdBu Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'RdBu',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'RdBu'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/YIGnBu-heatmap.html b/content/plotly_js/fundamentals/colorscales/YIGnBu-heatmap.html
new file mode 100644
index 00000000000..7f720e6e1ab
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/YIGnBu-heatmap.html
@@ -0,0 +1,22 @@
+---
+name: YlGnBu Colorscale
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'YlGnBu',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'YlGnBu'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/YIOrRd-heatmap.html b/content/plotly_js/fundamentals/colorscales/YIOrRd-heatmap.html
new file mode 100644
index 00000000000..ba580ee85c9
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/YIOrRd-heatmap.html
@@ -0,0 +1,23 @@
+---
+name: YlOrRd Heatmap
+language: plotly_js
+suite: colorscales
+order: 16
+sitemap: false
+arrangement: horizontal
+---
+
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: 'YlOrRd',
+ type: 'heatmap'
+ }
+];
+var layout = {
+ title: {
+ text: 'YlOrRd'
+ }
+};
+Plotly.newPlot('myDiv', data, layout);
+});
diff --git a/content/plotly_js/fundamentals/colorscales/colorscale-for-contour-plot.html b/content/plotly_js/fundamentals/colorscales/colorscale-for-contour-plot.html
new file mode 100644
index 00000000000..7dce3955707
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/colorscale-for-contour-plot.html
@@ -0,0 +1,27 @@
+---
+name: Colorscale for Contour Plot
+language: plotly_js
+suite: colorscales
+order: 20
+sitemap: false
+arrangement: horizontal
+---
+
+var data = [ {
+ z: [[10, 10.625, 12.5, 15.625, 20],
+ [5.625, 6.25, 8.125, 11.25, 15.625],
+ [2.5, 3.125, 5., 8.125, 12.5],
+ [0.625, 1.25, 3.125, 6.25, 10.625],
+ [0, 0.625, 2.5, 5.625, 10]],
+ type: 'contour',
+ colorscale: 'Jet'
+}
+];
+
+var layout = {
+ title: {
+ text: 'Colorscale for Contour Plot'
+ }
+};
+
+Plotly.newPlot('myDiv', data, layout);
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/colorscales/colorscales_new_plotlyjs_index.html b/content/plotly_js/fundamentals/colorscales/colorscales_new_plotlyjs_index.html
new file mode 100644
index 00000000000..8d026dfe310
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/colorscales_new_plotlyjs_index.html
@@ -0,0 +1,16 @@
+---
+description: How to set colorscales and heatmap colorscales in D3.js-based JavaScript
+ charts in Plotly.js. Divergent, sequential, and qualitative colorscales.
+display_as: file_settings
+language: plotly_js
+layout: base
+name: Colorscales
+order: 6
+page_type: u-guide
+permalink: javascript/colorscales/
+redirect_from: javascript-graphing-library/heatmap-and-contour-colorscales/
+thumbnail: thumbnail/heatmap_colorscale.jpg
+---
+
+{% assign examples = site.posts | where:'language','plotly_js' | where:'suite','colorscales' | sort: 'order' %}
+{% include posts/auto_examples.html examples=examples %}
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/colorscales/custom-colorscale-for-contour-plot.html b/content/plotly_js/fundamentals/colorscales/custom-colorscale-for-contour-plot.html
new file mode 100644
index 00000000000..ade05d99c7c
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/custom-colorscale-for-contour-plot.html
@@ -0,0 +1,26 @@
+---
+name: Custom Colorscale for Contour Plot
+language: plotly_js
+suite: colorscales
+order: 21
+sitemap: false
+arrangement: horizontal
+---
+var data = [ {
+ z: [[10, 10.625, 12.5, 15.625, 20],
+ [5.625, 6.25, 8.125, 11.25, 15.625],
+ [2.5, 3.125, 5., 8.125, 12.5],
+ [0.625, 1.25, 3.125, 6.25, 10.625],
+ [0, 0.625, 2.5, 5.625, 10]],
+ type: 'contour',
+ colorscale: [[0, 'rgb(166,206,227)'], [0.25, 'rgb(31,120,180)'], [0.45, 'rgb(178,223,138)'], [0.65, 'rgb(51,160,44)'], [0.85, 'rgb(251,154,153)'], [1, 'rgb(227,26,28)']]
+}
+];
+
+var layout = {
+ title: {
+ text: 'Custom Contour Plot Colorscale'
+ }
+};
+
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/colorscales/custom-colorscale.html b/content/plotly_js/fundamentals/colorscales/custom-colorscale.html
new file mode 100644
index 00000000000..ef7920aa280
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/custom-colorscale.html
@@ -0,0 +1,27 @@
+---
+name: Custom Colorscale
+language: plotly_js
+suite: colorscales
+order: 3
+sitemap: false
+arrangement: horizontal
+---
+d3.json('https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json', function(figure) {
+var data = [{
+ z: figure.z,
+ colorscale: [
+ ['0.0', 'rgb(165,0,38)'],
+ ['0.111111111111', 'rgb(215,48,39)'],
+ ['0.222222222222', 'rgb(244,109,67)'],
+ ['0.333333333333', 'rgb(253,174,97)'],
+ ['0.444444444444', 'rgb(254,224,144)'],
+ ['0.555555555556', 'rgb(224,243,248)'],
+ ['0.666666666667', 'rgb(171,217,233)'],
+ ['0.777777777778', 'rgb(116,173,209)'],
+ ['0.888888888889', 'rgb(69,117,180)'],
+ ['1.0', 'rgb(49,54,149)']
+ ],
+ type: 'heatmap'
+}];
+Plotly.newPlot('myDiv', data);
+ });
diff --git a/content/plotly_js/fundamentals/colorscales/discretized-heatmap-colorscale.html b/content/plotly_js/fundamentals/colorscales/discretized-heatmap-colorscale.html
new file mode 100644
index 00000000000..183fcfc4577
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorscales/discretized-heatmap-colorscale.html
@@ -0,0 +1,68 @@
+---
+name: Custom Discretized Heatmap Colorscale
+language: plotly_js
+suite: colorscales
+order: 22
+sitemap: false
+arrangement: horizontal
+---
+
+var data = [
+ {
+ z: [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],
+ colorscale: [
+
+// Let first 10% (0.1) of the values have color rgb(0, 0, 0)
+
+ [0, 'rgb(0, 0, 0)'],
+ [0.1, 'rgb(0, 0, 0)'],
+
+// Let values between 10-20% of the min and max of z
+// have color rgb(20, 20, 20)
+
+ [0.1, 'rgb(20, 20, 20)'],
+ [0.2, 'rgb(20, 20, 20)'],
+
+// Values between 20-30% of the min and max of z
+//have color rgb(40, 40, 40)
+
+ [0.2, 'rgb(40, 40, 40)'],
+ [0.3, 'rgb(40, 40, 40)'],
+
+ [0.3, 'rgb(60, 60, 60)'],
+ [0.4, 'rgb(60, 60, 60)'],
+
+ [0.4, 'rgb(80, 80, 80)'],
+ [0.5, 'rgb(80, 80, 80)'],
+
+ [0.5, 'rgb(100, 100, 100)'],
+ [0.6, 'rgb(100, 100, 100)'],
+
+ [0.6, 'rgb(120, 120, 120)'],
+ [0.7, 'rgb(120, 120, 120)'],
+
+ [0.7, 'rgb(140, 140, 140)'],
+ [0.8, 'rgb(140, 140, 140)'],
+
+ [0.8, 'rgb(160, 160, 160)'],
+ [0.9, 'rgb(160, 160, 160)'],
+
+ [0.9, 'rgb(180, 180, 180)'],
+ [1.0, 'rgb(180, 180, 180)']
+ ],
+ type: 'heatmap',
+ colorbar:{
+ tickmode: 'linear',
+ tick0: 0,
+ dtick: 1
+ }
+ }
+];
+
+var layout = {
+ title: {
+ text: 'CUSTOM DISCRETIZED HEATMAP COLORSCALE'
+ }
+};
+
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/colorway/colorway.html b/content/plotly_js/fundamentals/colorway/colorway.html
new file mode 100644
index 00000000000..506f5b94e80
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorway/colorway.html
@@ -0,0 +1,34 @@
+---
+name: Set Default Trace Colors with colorway
+language: plotly_js
+suite: colorway
+order: 1
+sitemap: false
+arrangement: horizontal
+---
+function linspace(a,b,n) {
+ return d3.range(n).map(function(i){return a+i*(b-a)/(n-1);});
+}
+
+const parabolaGen = (a, b) =>
+ x => x*x*a + b;
+
+var as = linspace(1, 3, 7);
+var bs = linspace(2, 14, 7);
+var x = linspace(-1, 3, 50);
+var data = [];
+
+for (i=0; i< as.length; i++ ){
+ data.push({
+ type: "scatter",
+ mode: "lines",
+ x: x,
+ y: x.map(parabolaGen(as[i],bs[i]))
+ })
+}
+
+var layout = {
+ colorway : ['#f3cec9', '#e7a4b6', '#cd7eaf', '#a262a9', '#6f4d96', '#3d3b72', '#182844']
+};
+
+Plotly.newPlot('myDiv', data, layout);
diff --git a/content/plotly_js/fundamentals/colorway/colorway_plotlyjs_index.html b/content/plotly_js/fundamentals/colorway/colorway_plotlyjs_index.html
new file mode 100644
index 00000000000..f2fe2bceffb
--- /dev/null
+++ b/content/plotly_js/fundamentals/colorway/colorway_plotlyjs_index.html
@@ -0,0 +1,14 @@
+---
+description: How to use colorway to set default trace colors in JavaScript with Plotly.
+display_as: file_settings
+language: plotly_js
+layout: base
+name: Colorway
+order: 7
+page_type: u-guide
+permalink: javascript/colorway/
+thumbnail: thumbnail/colorway.jpg
+---
+
+{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","colorway" | sort: "order" %}
+{% include posts/auto_examples.html examples=examples %}
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/config-options/add-button-to-modebar.html b/content/plotly_js/fundamentals/config-options/add-button-to-modebar.html
new file mode 100644
index 00000000000..9edc5c1e449
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/add-button-to-modebar.html
@@ -0,0 +1,48 @@
+---
+name: Add Buttons to ModeBar
+language: plotly_js
+suite: configuration
+order: 5.7
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ The following example shows how to add a button to your modebar, either by using one of the [Plotly icons](https://github.com/plotly/plotly.js/blob/master/src/fonts/ploticon.js) or an [arbitrary icon](https://fontawesome.com/icons?d=gallery&m=free) with a custom behaviour.
+---
+var icon1 = {
+ 'width': 500,
+ 'height': 600,
+ 'path': 'M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z'
+}
+
+var colors = ['green', 'red', 'blue']
+var data = [{
+ mode: 'lines',
+ y: [2, 1, 2],
+ line: {color: colors[0], width: 3, shape: 'spline'}
+}]
+
+var layout = {
+ title: {
+ text: 'add mode bar button with custom icon'
+ }
+}
+
+var config = {
+ displayModeBar: true,
+ modeBarButtonsToAdd: [
+ {
+ name: 'color toggler',
+ icon: icon1,
+ click: function(gd) {
+ var newColor = colors[Math.floor(3 * Math.random())]
+ Plotly.restyle(gd, 'line.color', newColor)
+ }},
+ {
+ name: 'button1',
+ icon: Plotly.Icons.pencil,
+ direction: 'up',
+ click: function(gd) {alert('button1')
+ }}],
+ modeBarButtonsToRemove: ['pan2d','select2d','lasso2d','resetScale2d','zoomOut2d']}
+
+Plotly.newPlot('myDiv', data, layout, config)
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/config-options/button-disable-axis.html b/content/plotly_js/fundamentals/config-options/button-disable-axis.html
new file mode 100644
index 00000000000..185c2fae7ab
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/button-disable-axis.html
@@ -0,0 +1,34 @@
+---
+name: Disabling Buttons for Specific Axes
+language: plotly_js
+suite: configuration
+order: 5.8
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ *New in 3.1*
+
+ Disabling the zoom in, zoom out, and autoscale buttons for specific axes is supported on cartesian axes using the `modebardisable` attribute. In the following example, the zoom in and zoom out buttons are disabled on the `xaxis`, meaning these buttons only zoom in and out on the `yaxis`. Disable the autoscale button using `modebardisable='autoscale'`. You can also disable both autoscaling and zoom buttons using `modebardisable='zoominout+autoscale'`.
+---
+var data = [{
+ type: "scatter",
+ mode: "lines+markers",
+ x: ["2023-01-01", "2023-02-01", "2023-03-01", "2023-04-01", "2023-05-01", "2023-06-01"],
+ y: [150, 160, 155, 170, 165, 180],
+ name: "Google Stock Price"
+}];
+
+var layout = {
+ title: "Google Stock Price Over Time with Mode Bar Disabled",
+ xaxis: {
+ title: "Date",
+ type: "date",
+ // Try zooming in or out using the modebar buttons. These only apply to the yaxis in this example.
+ modebardisable: "zoominout"
+ },
+ yaxis: {
+ title: "Stock Price (USD)"
+ }
+};
+
+Plotly.newPlot("myDiv", data, layout);
diff --git a/content/plotly_js/fundamentals/config-options/config-locale.html b/content/plotly_js/fundamentals/config-options/config-locale.html
new file mode 100644
index 00000000000..d6eb1ace4dd
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-locale.html
@@ -0,0 +1,40 @@
+---
+name: Change the Default Locale
+language: plotly_js
+suite: configuration
+order: 7.5
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ Load and register a non-default locale by adding ``
+ to your HTML after the plotly.js tag and then reference the locale in the `config`. For Example, the codepen example below has
+ `` in its HTML. For more information and a list of available locales, see
+ [https://github.com/plotly/plotly.js/blob/master/dist/README.md#to-include-localization](https://github.com/plotly/plotly.js/blob/master/dist/README.md#to-include-localization)
+---
+var trace1 = {
+ type: "scatter",
+ mode: "lines",
+ x: ['2018-01-01', '2018-08-31'],
+ y: [10, 5],
+ line: {color: '#17BECF'}
+};
+
+var trace2 = {
+ type: "scatter",
+ mode: "lines",
+ x: ['2018-01-01', '2018-08-31'],
+ y: [3,7],
+ line: {color: '#7F7F7F'}
+};
+
+var data = [trace1,trace2];
+
+var layout = {
+ title: {
+ text: 'Custom Locale'
+ }
+};
+
+var config = {locale: 'fr'};
+
+Plotly.newPlot('myDiv', data, layout, config);
\ No newline at end of file
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-displaylogo.html b/content/plotly_js/fundamentals/config-options/config-opt-displaylogo.html
new file mode 100644
index 00000000000..c725877df12
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-displaylogo.html
@@ -0,0 +1,25 @@
+---
+name: Hide the Plotly Logo on the Modebar
+language: plotly_js
+suite: configuration
+order: 8
+sitemap: false
+arrangement: horizontal
+---
+
+var trace1 = {
+ x:['trees', 'flowers', 'hedges'],
+ y: [90, 130, 40],
+ type: 'bar'
+};
+
+var data = [trace1];
+
+var layout = {
+ title: {
+ text: 'Hide the Plotly Logo on the Modebar'
+ },
+ showlegend: false
+};
+
+Plotly.newPlot('myDiv', data, layout, {displaylogo: false});
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-hide-modebar.html b/content/plotly_js/fundamentals/config-options/config-opt-hide-modebar.html
new file mode 100644
index 00000000000..5fdc97667e2
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-hide-modebar.html
@@ -0,0 +1,36 @@
+---
+name: Never Display The Modebar
+language: plotly_js
+suite: configuration
+order: 5
+sitemap: false
+arrangement: horizontal
+markdown_content: |
+ When users hover over a figure generated with `plotly.js`, a `modebar` appears in the top-right of the figure. This presents users with several options for interacting with the figure.
+
+ By default, the `modebar` is only visible while the user is hovering over the chart. If you would like the `modebar` to never be visible, then set the `displayModeBar` attribute in the `config` of your figure to `false`.
+---
+var trace1 = {
+ x:['Zebras', 'Lions', 'Pelicans'],
+ y: [90, 40, 60],
+ type: 'bar',
+ name: 'New York Zoo'
+};
+
+var trace2 = {
+ x:['Zebras', 'Lions', 'Pelicans'],
+ y: [10, 80, 45],
+ type: 'bar',
+ name: 'San Francisco Zoo'
+};
+
+var data = [trace1, trace2];
+
+var layout = {
+ title: {
+ text: 'Hide the Modebar'
+ },
+ showlegend: true
+};
+
+Plotly.newPlot('myDiv', data, layout, {displayModeBar: false});
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-link-text.html b/content/plotly_js/fundamentals/config-options/config-opt-link-text.html
new file mode 100644
index 00000000000..e3f409e76c5
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-link-text.html
@@ -0,0 +1,27 @@
+---
+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/content/plotly_js/fundamentals/config-options/config-opt-responsive.html b/content/plotly_js/fundamentals/config-options/config-opt-responsive.html
new file mode 100644
index 00000000000..a5df6f726ee
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-responsive.html
@@ -0,0 +1,30 @@
+---
+name: Making a Responsive Chart
+language: plotly_js
+suite: configuration
+order: 10
+sitemap: false
+arrangement: horizontal
+---
+var trace1 = {
+ type: 'bar',
+ x: [1, 2, 3, 4],
+ y: [5, 10, 2, 8],
+ marker: {
+ color: '#C8A2C8',
+ line: {
+ width: 2.5
+ }
+ }
+};
+
+var data = [ trace1 ];
+
+var layout = {
+ title: {
+ text: 'Responsive to window size!'
+ },
+ font: {size: 18}
+};
+
+Plotly.newPlot('myDiv', data, layout, {responsive: true});
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-scrollzoom.html b/content/plotly_js/fundamentals/config-options/config-opt-scrollzoom.html
new file mode 100644
index 00000000000..6833d22484a
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-scrollzoom.html
@@ -0,0 +1,26 @@
+---
+name: Scroll and Zoom
+language: plotly_js
+suite: configuration
+order: 1
+sitemap: false
+arrangement: horizontal
+---
+// mousewheel or two-finger scroll zooms the plot
+
+var trace1 = {
+ x:['2020-10-04', '2021-11-04', '2023-12-04'],
+ y: [90, 40, 60],
+ type: 'scatter'
+};
+
+var data = [trace1];
+
+var layout = {
+ title: {
+ text: 'Scroll and Zoom'
+ },
+ showlegend: false
+};
+
+Plotly.newPlot('myDiv', data, layout, {scrollZoom: true});
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-showlink.html b/content/plotly_js/fundamentals/config-options/config-opt-showlink.html
new file mode 100644
index 00000000000..b75ab5859c4
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-showlink.html
@@ -0,0 +1,32 @@
+---
+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/content/plotly_js/fundamentals/config-options/config-opt-static-plot.html b/content/plotly_js/fundamentals/config-options/config-opt-static-plot.html
new file mode 100644
index 00000000000..b47fe67fdab
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-static-plot.html
@@ -0,0 +1,27 @@
+---
+name: Making a Static Chart
+language: plotly_js
+suite: configuration
+order: 3
+sitemap: false
+arrangement: horizontal
+---
+var trace1 = {
+ x: [0, 1, 2, 3, 4, 5, 6],
+ y: [1, 9, 4, 7, 5, 2, 4],
+ mode: 'markers',
+ marker: {
+ size: [20, 40, 25, 10, 60, 90, 30],
+ }
+};
+
+var data = [trace1];
+
+var layout = {
+ title: {
+ text: 'Create a Static Chart'
+ },
+ showlegend: false
+};
+
+Plotly.newPlot('myDiv', data, layout, {staticPlot: true});
diff --git a/content/plotly_js/fundamentals/config-options/config-opt-toImageButtonOptions.html b/content/plotly_js/fundamentals/config-options/config-opt-toImageButtonOptions.html
new file mode 100644
index 00000000000..688279133e9
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-opt-toImageButtonOptions.html
@@ -0,0 +1,37 @@
+---
+name: Customize Download Plot Options
+language: plotly_js
+suite: configuration
+order: 3.1
+sitemap: false
+arrangement: horizontal
+---
+var trace1 = {
+ x: [0, 1, 2, 3, 4, 5, 6],
+ y: [1, 9, 4, 7, 5, 2, 4],
+ mode: 'markers',
+ marker: {
+ size: [20, 40, 25, 10, 60, 90, 30],
+ }
+};
+
+var data = [trace1];
+
+var layout = {
+ title: {
+ text: 'Download Chart as SVG instead of PNG'
+ },
+ showlegend: false
+};
+
+var config = {
+ toImageButtonOptions: {
+ format: 'svg', // one of png, svg, jpeg, webp
+ filename: 'custom_image',
+ height: 500,
+ width: 700,
+ scale: 1 // Multiply title/legend/axis/canvas sizes by this factor
+ }
+};
+
+Plotly.newPlot('myDiv', data, layout, config);
diff --git a/content/plotly_js/fundamentals/config-options/config-showSendToCloud.html b/content/plotly_js/fundamentals/config-options/config-showSendToCloud.html
new file mode 100644
index 00000000000..0a906c6263d
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config-showSendToCloud.html
@@ -0,0 +1,26 @@
+---
+name: Display Edit in Chart Studio Modebar Button
+language: plotly_js
+suite: configuration
+order: 7.1
+sitemap: false
+arrangement: horizontal
+---
+var data = [{
+ values: [19, 26, 55],
+ labels: ['Residential', 'Non-Residential', 'Utility'],
+ type: 'pie'
+}];
+
+var layout = {
+ title: {
+ text: 'Show Edit in Chart Studio Modebar Button'
+ }
+};
+
+var config = {
+ showEditInChartStudio: true,
+ plotlyServerURL: "https://chart-studio.plotly.com"
+};
+
+Plotly.newPlot('myDiv', data, layout, config);
diff --git a/content/plotly_js/fundamentals/config-options/config_options_index.html b/content/plotly_js/fundamentals/config-options/config_options_index.html
new file mode 100644
index 00000000000..ecd0697852c
--- /dev/null
+++ b/content/plotly_js/fundamentals/config-options/config_options_index.html
@@ -0,0 +1,26 @@
+---
+description: How to set the configuration options for figures in JavaScript.
+display_as: file_settings
+language: plotly_js
+layout: base
+name: Configuration Options
+order: 1
+page_type: example_index
+permalink: javascript/configuration-options/
+thumbnail: thumbnail/modebar-icons.png
+---
+
+
+
+The plotly.js config argument sets properties like the mode bar buttons and the interactivity in the chart.
+It's the last argument in Plotly.newPlot calls.
++ Please read the full Plotly.js End User License Agreement before using, downloading, or purchasing the software. +
+ +{{page.description}}
+ {% include layouts/dashplug.html %} +With the release of Plotly.js v2.35.0, we are introducing a new set of trace types for maps with tile underlays:
+ +These traces replace the existing Mapbox traces, Choroplethmapbox, Scattermapbox,
+ Densitymapbox, but use MapLibre as the map renderer rather than
+ Mapbox.
+
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.
+ +You can learn more about the motivations for this change in our announcement + post.
+ +As a result of removing Mapbox as the rendering engine, we're also removing the Mapbox branding from these trace + names. + This means that migrating from Mapbox traces to MapLibre traces will require some code changes in your projects.
+ +*mapbox to *map. For any existing trace name ending in
+ *mapbox,
+ ensure you've removed the "box" suffix.
+ layout.mapbox argument in your layout configuration to layout.map.
+ The nested properties are identical in the new map traces, so no other changes should be required.mapbox_style to map_style.map_style settings. With mapbox traces, we bundle basic,
+ streets,
+ 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.
+ 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 diff --git a/content/plotly_js/maps/plotly_js-map-index.html b/content/plotly_js/maps/plotly_js-map-index.html new file mode 100644 index 00000000000..377ee3ea7aa --- /dev/null +++ b/content/plotly_js/maps/plotly_js-map-index.html @@ -0,0 +1,27 @@ +--- +permalink: javascript/maps/ +description: Plotly.js makes interactive, publication-quality graphs online. Examples of how to make maps. +name: Maps +layout: langindex +language: plotly_js +display_as: maps +thumbnail: thumbnail/mixed.jpg +--- + + +{{page.description}}
+ {% include layouts/dashplug.html %} +
+ Built on top of d3.js and stack.gl, Plotly.js is a high-level, declarative charting library. plotly.js ships with over 40 chart types, including 3D charts, statistical graphs, and SVG maps.
+
plotly.js is free and open source and you can view the source, report issues or contribute on GitHub.
+
plotly.js abstracts the types of statistical and scientific charts that you would find in packages like matplotlib, ggplot2, or MATLAB.
+ d3.json('https://plotly.com/~DanielCarrera/13.json', function(figure){
+ var trace = {
+ x: figure.data[0].x, y: figure.data[0].y, z: figure.data[0].z,
+ type: 'contour', autocolorscale: false,
+ colorscale: [[0,"rgb( 0, 0, 0)"],[0.3,"rgb(230, 0, 0)"],[0.6,"rgb(255,210, 0)"],[1,"rgb(255,255,255)"]],
+ reversescale: true, zmax: 2.5, zmin: -2.5
+ };
+ var layout = {
+ title: {
+ text: 'turbulence simulation'
+ },
+ xaxis: {
+ title: {
+ text: 'radial direction'
+ },
+ showline: true,
+ mirror: 'allticks',
+ ticks: 'inside'
+ },
+ yaxis: {
+ title: {
+ text: 'vertical direction'
+ },
+ showline: true,
+ mirror: 'allticks',
+ ticks: 'inside'
+ },
+ margin: {l: 40, b: 40, t: 60},
+ annotations: [{
+ showarrow: false,
+ text: 'Credit: Daniel Carrera',
+ x: 0, y: 0, xref: 'paper', yref: 'paper'
+ }]
+ }
+ Plotly.newPlot(document.getElementById('contour-plot'), [trace], layout, {showLink: false});
+ });
+
+
+
+ plotly.js charts are described declaratively as JSON objects. Every aspect of the charts, such as colors, grid lines, and the legend, has a corresponding set of JSON attributes.
+
+ d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/wind_speed_laurel_nebraska.csv', function(rows){
+ var trace = {
+ type: 'scatter', // set the chart type
+ mode: 'lines', // connect points with lines
+ x: rows.map(function(row){ // set the x-data
+ return row['Time'];
+ }),
+ y: rows.map(function(row){ // set the x-data
+ return row['10 Min Sampled Avg'];
+ }),
+ line: { // set the width of the line.
+ width: 1
+ },
+ error_y: {
+ array: rows.map(function(row){ // set the height of the error bars
+ return row['10 Min Std Dev'];
+ }),
+ thickness: 0.5, // set the thickness of the error bars
+ width: 0
+ }
+ };
+
+ var layout = {
+ yaxis: {
+ title: {
+ text: "Wind Speed"
+ }
+ }, // set the y axis title
+ xaxis: {
+ showgrid: false, // remove the x-axis grid lines
+ tickformat: "%B, %Y" // customize the date format to "month, day"
+ },
+ margin: { // update the left, bottom, right, top margin
+ l: 40, b: 10, r: 10, t: 20
+ }
+ };
+
+ Plotly.newPlot(document.getElementById('wind-speed'), [trace], layout, {showLink: false});
+ });
+
+
+
+ plotly.js uses stack.gl for high performance 2D and 3D charting.plotly.js chart type scattergl. scattergl charts render an order of magnitude faster than their SVG counterparts.
+
+ plotly.js are rendered with WebGL, leveraging the power of the GPU for fast interactivity.
+ view the interactive version
+ graphDiv<div> element on the page, commonly referred to as graphDiv or plotDiv. The first argument to each function on this page is a reference to this element, and it can be either a DOM node, i.e. the output of document.getElementById(), or a string, in which case it will be treated as the id of the div. A note on sizing: You can either supply height and width in the layout object (see below), or give the <div> a height and width in CSS.datadata, whose elements are trace objects of various types (e.g. scatter, bar etc) as documented in the Full Reference.
+ layoutlayout, as documented in/ the Full Reference.
+ configconfig, as documented here. The difference between config and layout is that layout relates to the content of the plot, whereas config relates to the context in which the plot is being shown.
+ framesframes as per the example here.
+ They can contain data and layout objects, which define any changes to be animated, and a traces
+ object that defines which traces to animate. Additionally, frames containing name and/or group
+ attributes can be referenced by Plotly.animate
+ after they are added by Plotly.addFrames
+ <div> element, overwriting any existing plot. To update an existing plot in a <div>, it is much more efficient to use Plotly.react than to overwrite it.
+data or layout can always be retrieved from the <div> element in which the plot was drawn:
+
+var graphDiv = document.getElementById('id_of_the_div')
+
+var data = [{
+ x: [1999, 2000, 2001, 2002],
+ y: [10, 15, 13, 17],
+ type: 'scatter'
+}];
+
+var layout = {
+ title: {
+ text: 'Sales Growth'
+ },
+ xaxis: {
+ title: {
+ text: 'Year'
+ },
+ showgrid: false,
+ zeroline: false
+ },
+ yaxis: {
+ title: {
+ text: 'Percent'
+ },
+ showline: false
+ }
+};
+Plotly.newPlot(graphDiv, data, layout);
+
+...
+var dataRetrievedLater = graphDiv.data;
+var layoutRetrievedLater = graphDiv.layout;
+
+
+
+Plotly.react has the same signature as Plotly.newPlot above, and can be used in its place to create a plot, but when called again on the same <div> will update it far more efficiently than Plotly.newPlot, which would destroy and recreate the plot. Plotly.react is as fast as Plotly.restyle/Plotly.relayout documented below.
+data such as x or marker.color etc, these items must either have been added immutably (i.e. the identity of the parent array must have changed) or the value of layout.datarevision must have changed.
+
+Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.data array in an existing plot. When restyling, you may choose to have the specified changes affect as many traces as desired. The update is given as a single object and the traces that are affected are given as a list of traces indices. Note, leaving the trace indices unspecified assumes that you want to restyle all the traces.
+
+
+// restyle a single trace using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update, 0);
+
+// restyle all traces using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update);
+
+// restyle two traces using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update, [1, 2]);
+
+
+See the Pen Plotly.restyle by plotly (@plotly) on CodePen.
+ + +
+// restyle the first trace's marker color 'red' and the second's 'green'
+var update = {
+ 'marker.color': ['red', 'green']
+};
+Plotly.restyle(graphDiv, update, [0, 1])
+
+// alternate between red and green for all traces (note omission of traces)
+var update = {
+ 'marker.color': ['red', 'green']
+};
+Plotly.restyle(graphDiv, update)
+
+
+See the Pen Plotly.restyle Traces in Turn by plotly (@plotly) on CodePen.
+ +
+// update the color attribute of the first trace so that the markers within the same trace
+// have different colors
+var update = {
+ 'marker.color': [['red', 'green']]
+}
+Plotly.restyle(graphDiv, update, [0])
+
+// update two traces with new z data
+var update = {z: [[[1,2,3], [2,1,2], [1,1,1]], [[0,1,1], [0,2,1], [3,2,1]]]};
+Plotly.restyle(graphDiv, update, [1, 2])
+
+
+See the Pen Plotly.restyle Arrays by plotly (@plotly) on CodePen.
+ +{marker: {color: 'red'}} vs. {'marker.color': red}). When you pass an attribute string to restyle inside the update object, it’s assumed to mean update only this attribute. Therefore, if you wish to replace and entire sub-object, you may simply specify one less level of nesting.
+
+
+// replace the entire marker object with the one provided
+var update = {
+ marker: {color: 'red'}
+};
+Plotly.restyle(graphDiv, update, [0])
+
+
+See the Pen Plotly.restyle Attribute strings by plotly (@plotly) on CodePen.
+ +
+// Set the first trace's line to red, the second to the default, and ignore the third
+Plotly.restyle(graphDiv, {
+ 'line.color': ['red', null, undefined]
+}, [0, 1, 2])
+
+
+See the Pen null vs. undefined in Plotly.restyle by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.layout object of an existing plot. The call signature and arguments for relayout are similar (but simpler) to restyle. Because there are no indices to deal with, arrays need not be wrapped. Also, no argument specifying applicable trace indices is passed in.
+
+
+// update only values within nested objects
+var update = {
+ title: {text: 'some new title'}, // updates the title
+ 'xaxis.range': [0, 5], // updates the xaxis range
+ 'yaxis.range[1]': 15 // updates the end of the yaxis range
+};
+Plotly.relayout(graphDiv, update)
+
+
+See the Pen Plotly.relayout by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.data array and layout object in an existing plot, basically a combination of Plotly.restyle and Plotly.relayout.
+
+//update the layout and all the traces
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update)
+
+//update the layout and a single trace
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update,0)
+
+//update the layout and two specific traces
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update, [0,2])
+
+
+
+
+See the Pen Plotly.update by plotly (@plotly) on CodePen.
+ + +Plotly.validate allows users to validate their input data array and layout object. This can be done on the data array and layout object passed into Plotly.newPlot or on an updated graphDiv with Plotly.validate(graphDiv.data, graphDiv.layout).
+
+var data = [{
+ type: 'bar',
+ y: [2, 1, 3, 2],
+ orientation: 'horizontal'
+}];
+
+var out = Plotly.validate(data, layout);
+console.log(out[0].msg)
+// "In data trace 0, key orientation is set to an invalid value (horizontal)"
+
+
+Plotly.makeTemplate copies the style information from a figure. It does this by returning a template object which can be passed to the layout.template attribute of another figure.
+
+var figure = {
+ data: [{
+ type: 'bar',
+ marker: {color: 'red'},
+ y: [2, 1, 3, 2],
+ }],
+ layout:{
+ title: {
+ text: 'Quarterly Earnings'
+ }
+ }
+};
+
+var template = Plotly.makeTemplate(figure);
+
+var newData = [{
+ type:'bar',
+ y:[3,2,5,8]
+}]
+
+var layout = {template:template}
+
+Plotly.newPlot(graphDiv,newData,layout)
+
+
+
+Plotly.validateTemplate allows users to Test for consistency between the given figure and a template,
+either already included in the figure or given separately. Note that not every issue identified here is necessarily
+a problem, it depends on what you're using the template for.
+
+var out = Plotly.validateTemplate(figure, template);
+console.log(out[0].msg)
+// "The template has 1 traces of type bar but there are none in the data."
+
+
+Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv at any location in its data array. Every graphDiv object has a data component which is an array of JSON blobs that each describe one trace. The full list of trace types can be found in the Full Reference.
+
+
+
+// add a single trace to an existing graphDiv
+Plotly.addTraces(graphDiv, {y: [2,1,2]});
+
+// add two traces
+Plotly.addTraces(graphDiv, [{y: [2,1,2]}, {y: [4, 5, 7]}]);
+
+// add a trace at the beginning of the data array
+Plotly.addTraces(graphDiv, {y: [1, 5, 7]}, 0);
+
+
+See the Pen Plotly.addtraces by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv by specifying the indices of the traces to be removed.
+
+
+// remove the first trace
+Plotly.deleteTraces(graphDiv, 0);
+
+// remove the last two traces
+Plotly.deleteTraces(graphDiv, [-2, -1]);
+
+
+See the Pen Plotly.deleteTraces by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv. This will change the ordering of the layering and the legend.
+
+All traces defined in graphDiv are ordered in an array. They are drawn one by one from first to last. Each time a new layer or trace is drawn to the canvas the new trace is drawn directly over the current canvas, replacing the colors of the traces and background. This algorithm to image stacking/drawing is known as the Painter's Algorithm. As its name implies the Painter's Algorithm is typically the manner in which a painter paints a landscape, starting from objects with the most perspective depth and progressively moving forward and layering over the background objects.
+
+
+// move the first trace (at index 0) the the end of the data array
+Plotly.moveTraces(graphDiv, 0);
+
+// move selected traces (at indices [0, 3, 5]) to the end of the data array
+Plotly.moveTraces(graphDiv, [0, 3, 5]);
+
+// move last trace (at index -1) to the beginning of the data array (index 0)
+Plotly.moveTraces(graphDiv, -1, 0);
+
+// move selected traces (at indices [1, 4, 5]) to new indices [0, 3, 2]
+Plotly.moveTraces(graphDiv, [1, 4, 5], [0, 3, 2]);
+
+
+See the Pen Plotly.moveTraces by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv.
+
+
+// extend one trace
+Plotly.extendTraces(graphDiv, {y: [[rand()]]}, [0])
+
+// extend multiple traces
+Plotly.extendTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1])
+
+// extend multiple traces up to a maximum of 10 points per trace
+Plotly.extendTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1], 10)
+
+
+See the Pen Plotly.extendTraces by plotly (@plotly) on CodePen.
+ + +Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv.
+
+
+// prepend one trace
+Plotly.prependTraces(graphDiv, {y: [[rand()]]}, [0])
+
+// prepend multiple traces
+Plotly.prependTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1])
+
+// prepend multiple traces up to a maximum of 10 points per trace
+Plotly.prependTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1], 10)
+
+
+Plotly.react and is faster than redrawing the whole plot with Plotly.newPlot.graphDiv. The group or name attribute of a frame can
+be used by Plotly.animate in place of a frame object (or array of
+frame objects).
+See example here.
+
+Plotly.animate.
+
+
+Plotly.newPlot('graph', [{
+ x: [1, 2, 3],
+ y: [0, 0.5, 1],
+ line: {simplify: false},
+}]);
+
+function randomize() {
+ Plotly.animate('graph', {
+ data: [{y: [Math.random(), Math.random(), Math.random()]}],
+ traces: [0],
+ layout: {}
+ }, {
+ transition: {
+ duration: 500,
+ easing: 'cubic-in-out'
+ },
+ frame: {
+ duration: 500
+ }
+ })
+}
+
+
+See the Pen Plotly.animate by plotly (@plotly) on CodePen.
+ + + +purge will clear the div, and remove any Plotly plots that have been placed in it.
+
+// purge will be used on the div that you wish clear of Plotly plots
+Plotly.purge(graphDiv);
+
+
+See the Pen Plotly.purge by plotly (@plotly) on CodePen.
+ + +toImage will generate a promise to an image of the plot in data URL format.
+
+// Plotly.toImage will turn the plot in the given div into a data URL string
+// toImage takes the div as the first argument and an object specifying image properties as the other
+Plotly.toImage(graphDiv, {format: 'png', width: 800, height: 600}).then(function(dataUrl) {
+ // use the dataUrl
+})
+
+
+See the Pen Plotly.toImage by plotly (@plotly) on CodePen.
+ + +downloadImage will trigger a request to download the image of a Plotly plot.
+
+// downloadImage will accept the div as the first argument and an object specifying image properties as the other
+Plotly.downloadImage(graphDiv, {format: 'png', width: 800, height: 600, filename: 'newplot'});
+
+
+See the Pen Plotly.toImage by plotly (@plotly) on CodePen.
+ + +plotly_ when clicked or hovered over, and event handlers can be bound to events using the on method that is exposed by the plot div object. For more information and examples of how to use Plotly events see: https://plotly.com/javascript/plotlyjs-events/.
diff --git a/content/plotly_js/plotlyjs-getting-started.html b/content/plotly_js/plotlyjs-getting-started.html
new file mode 100644
index 00000000000..8792041a2fe
--- /dev/null
+++ b/content/plotly_js/plotlyjs-getting-started.html
@@ -0,0 +1,105 @@
+---
+name: Getting Started
+permalink: javascript/getting-started/
+description: Getting Started with plotly
+layout: base
+language: plotly_js
+redirect_from: javascript-graphing-library/getting-started/
+---
+
+
+
+ You can install Plotly.js from NPM via npm install plotly.js-dist or yarn add plotly.js-dist
+
+ You can also use the ultrafast plotly.js CDN link. This CDN is graciously provided by the incredible team at Fastly. +
+ +<head>
+ <script src="https://cdn.plot.ly/plotly-{{site.data.jsversion.version}}.min.js" charset="utf-8"></script>
+</head>
+
+ + Download the minified plotly.js source code and dependencies. +
+ ++ Include the downloaded scripts before the end of the </head> tag in your HTML document: +
+ +<head>
+ <script src="plotly-{{site.data.jsversion.version}}.min.js" charset="utf-8"></script>
+</head>
+
+
+ + In your HTML document, create an empty DIV to draw the graph in: +
+ +<div id="tester" style="width:600px;height:250px;"></div>
+
+
+ Now you can make interactive plotly.js charts using Plotly.newPlot().
+
<script>
+ TESTER = document.getElementById('tester');
+ Plotly.newPlot( TESTER, [{
+ x: [1, 2, 3, 4, 5],
+ y: [1, 2, 4, 8, 16] }], {
+ margin: { t: 0 } } );
+</script>
+
+
+ Now you can pass Plotly.newPlot() either the ID of the DIV ("tester") or the DIV DOM element (TESTER).
+
+
+ {{page.description}}
+ {% include layouts/dashplug.html %} +{{page.description}}
+ {% include layouts/dashplug.html %} +{{page.description}}
+ {% include layouts/dashplug.html %} +layout.annotationsbar Tracesbarpolar Tracesbox Tracescandlestick Tracescarpet Traceschoropleth Traceschoroplethmap Traceschoroplethmapbox Traceslayout.coloraxiscone Tracescontour Tracescontourcarpet Tracesdensitymap Tracesdensitymapbox Tracesfunnel Tracesfunnelarea Traceslayout.geolayoutheatmap Traceshistogram Traceshistogram2d Traceshistogram2dcontour Tracesicicle Tracesimage Traceslayout.imagesindicator Tracesisosurface Traceslayout.mapboxmesh3d Tracesohlc Tracesparcats Tracesparcoords Tracespie Traceslayout.polarsankey Tracesscatter Tracesscatter3d Tracesscattercarpet Tracesscattergeo Tracesscattergl Tracesscattermap Tracesscattermapbox Tracesscatterpolar Tracesscatterpolargl Tracesscattersmith Tracesscatterternary Traceslayout.scenelayout.selectionslayout.shapeslayout.sliderslayout.smithsplom Tracesstreamtube Tracessunburst Tracessurface Tracestable Traceslayout.ternarytreemap Traceslayout.updatemenusviolin Tracesvolume Traceswaterfall Traceslayout.xaxislayout.yaxisThe pages linked in the sidebar together form the exhaustive reference for all of the attributes in the core figure data structure
+that the plotly library operates on. They are automatically-generated from the
+ machine-readable Plotly.js schema reference.
+ plotly.js charts are described declaratively as JSON objects. Every aspect of a plotly chart (the colors, the grids, the data, and so on) has a corresponding JSON attribute. This page contains an extensive list of these attributes.
+
+ Plotly's graph description places attributes into two categories: traces (objects that describe a single series of data in a graph) and layout (attributes that apply to the rest of the chart, like the title, xaxis, or annotations). Traces are categorized by chart type (e.g. scatter, heatmap).
+
+ Here is a simple example of a plotly chart inlined with links to each attribute's reference section.
+
+
+ data = [
+ {
+ type: 'scatter', // all "scatter" attributes: https://plotly.com/javascript/reference/#scatter
+ x: [1, 2, 3], // more about "x": #scatter-x
+ y: [3, 1, 6], // #scatter-y
+ marker: { // marker is an object, valid marker keys: #scatter-marker
+ color: 'rgb(16, 32, 77)' // more about "marker.color": #scatter-marker-color
+ }
+ },
+ {
+ type: 'bar', // all "bar" chart attributes: #bar
+ x: [1, 2, 3], // more about "x": #bar-x
+ y: [3, 1, 6], // #bar-y
+ name: 'bar chart example' // #bar-name
+ }
+ ];
+
+ layout = { // all "layout" attributes: #layout
+ title: 'simple example', // more about "layout.title": #layout-title
+ xaxis: { // all "layout.xaxis" attributes: #layout-xaxis
+ title: 'time' // more about "layout.xaxis.title": #layout-xaxis-title
+ },
+ annotations: [ // all "annotation" attributes: #layout-annotations
+ {
+ text: 'simple annotation', // #layout-annotations-text
+ x: 0, // #layout-annotations-x
+ xref: 'paper', // #layout-annotations-xref
+ y: 0, // #layout-annotations-y
+ yref: 'paper' // #layout-annotations-yref
+ }
+ ]
+ }
+
+
+ plotly.js charts are described declaratively as JSON objects. Every aspect of a plotly chart (the colors, the grids, the data, and so on) has a corresponding JSON attribute. This page contains an extensive list of these attributes.
+
+ Plotly's graph description places attributes into two categories: traces (objects that describe a single series of data in a graph) and layout (attributes that apply to the rest of the chart, like the title, xaxis, or annotations). Traces are categorized by chart type (e.g. scatter, heatmap).
+
+ Here is a simple example of a plotly chart inlined with links to each attribute's reference section.
+
+
+ data = [
+ {
+ type: 'scatter', // all "scatter" attributes: https://plotly.com/javascript/reference/#scatter
+ x: [1, 2, 3], // more about "x": #scatter-x
+ y: [3, 1, 6], // #scatter-y
+ marker: { // marker is an object, valid marker keys: #scatter-marker
+ color: 'rgb(16, 32, 77)' // more about "marker.color": #scatter-marker-color
+ }
+ },
+ {
+ type: 'bar', // all "bar" chart attributes: #bar
+ x: [1, 2, 3], // more about "x": #bar-x
+ y: [3, 1, 6], // #bar-y
+ name: 'bar chart example' // #bar-name
+ }
+ ];
+
+ layout = { // all "layout" attributes: #layout
+ title: 'simple example', // more about "layout.title": #layout-title
+ xaxis: { // all "layout.xaxis" attributes: #layout-xaxis
+ title: 'time' // more about "layout.xaxis.title": #layout-xaxis-title
+ },
+ annotations: [ // all "annotation" attributes: #layout-annotations
+ {
+ text: 'simple annotation', // #layout-annotations-text
+ x: 0, // #layout-annotations-x
+ xref: 'paper', // #layout-annotations-xref
+ y: 0, // #layout-annotations-y
+ yref: 'paper' // #layout-annotations-yref
+ }
+ ]
+ }
+
+ The pages linked in the sidebar together form the exhaustive reference for all of the attributes in the core figure data structure
+that the plotly library operates on. They are automatically-generated from the
+ machine-readable Plotly.js schema reference.
Figures are represented as trees with named nodes called "attributes".
+The root node of the tree has three top-level attributes: data, layout and frames.
+Attributes are referred to in text and in this reference by their full "path" i.e. the dot-delimited concatenation of their parents.
+For example "layout.width" refers to the attribute whose key is "width" inside a dict which is
+the value associated with a key "layout" at the root of the figure. If one of the parents is a list rather
+than a dict, a set of brackets is inserted in the path when referring to the attribute in the abstract,
+e.g. "layout.annotations[].text". Finally, as explained below, the top-level "data"
+attribute defines a list of typed objects called "traces" with the schema dependent upon the type,
+and these attributes' paths are listed in this reference as
+"data[type=scatter].name". When manipulating
+a plotly.graph_objects.Figure object, attributes can be set either directly
+using Python object attributes e.g. fig.layout.title.font.family="Open Sans"
+or using update methods
+and "magic underscores" e.g. fig.update_layout(title_font_family="Open Sans")
When building a figure, it is not necessary to populate every attribute
+of every object. At render-time, the JavaScript layer will compute default values
+for each required unspecified attribute, depending upon the ones that are specified,
+as documented in this page. An example of this would be layout.xaxis.range,
+which may be specified explicitly, but if not will be computed based on the range of x values for
+every trace linked to that axis. The JavaScript layer will ignore unknown attributes
+or malformed values, although the plotly.graph_objects module provides
+Python-side validation for attribute values. Note also that if the layout.template
+key is present (as it is by default) then default values will be drawn first from the contents
+of the template and only if missing from there will the JavaScript layer infer further defaults.
+The built-in template can be disabled by setting layout.template="none".
This page is the exhaustive reference for all of the attributes in the core figure data structure
+that the plotly library operates on. It is automatically-generated from the
+ machine-readable Plotly.js schema reference.
Figures are represented as trees with named nodes called "attributes".
+The root node of the tree has three top-level attributes: data, layout and frames.
+Attributes are referred to in text and in this page by their full "path" i.e. the dot-delimited concatenation of their parents.
+For example "layout.width" refers to the attribute whose key is "width" inside a dict which is
+the value associated with a key "layout" at the root of the figure. If one of the parents is a list rather
+than a dict, a set of brackets is inserted in the path when referring to the attribute in the abstract,
+e.g. "layout.annotations[].text". Finally, as explained below, the top-level "data"
+attribute defines a list of typed objects called "traces" with the schema dependent upon the type,
+and these attributes' paths are listed in this page as
+"data[type=scatter].name". When manipulating
+a plotly.graph_objects.Figure object, attributes can be set either directly
+using Python object attributes e.g. fig.layout.title.font.family="Open Sans"
+or using update methods
+and "magic underscores" e.g. fig.update_layout(title_font_family="Open Sans")
When building a figure, it is not necessary to populate every attribute
+of every object. At render-time, the JavaScript layer will compute default values
+for each required unspecified attribute, depending upon the ones that are specified,
+as documented in this page. An example of this would be layout.xaxis.range,
+which may be specified explicitly, but if not will be computed based on the range of x values for
+every trace linked to that axis. The JavaScript layer will ignore unknown attributes
+or malformed values, although the plotly.graph_objects module provides
+Python-side validation for attribute values. Note also that if the layout.template
+key is present (as it is by default) then default values will be drawn first from the contents
+of the template and only if missing from there will the JavaScript layer infer further defaults.
+The built-in template can be disabled by setting layout.template="none".
layout.annotationsbar Tracesbarpolar Tracesbox Tracescandlestick Tracescarpet Traceschoropleth Traceschoroplethmap Traceschoroplethmapbox Traceslayout.coloraxiscone Tracescontour Tracescontourcarpet Tracesdensitymap Tracesdensitymapbox Tracesfunnel Tracesfunnelarea Traceslayout.geolayoutheatmap Tracesheatmapgl Traceshistogram Traceshistogram2d Traceshistogram2dcontour Tracesicicle Tracesimage Traceslayout.imagesindicator Tracesisosurface Traceslayout.mapboxmesh3d Tracesohlc Tracesparcats Tracesparcoords Tracespie Tracespointcloud Traceslayout.polarsankey Tracesscatter Tracesscatter3d Tracesscattercarpet Tracesscattergeo Tracesscattergl Tracesscattermap Tracesscattermapbox Tracesscatterpolar Tracesscatterpolargl Tracesscattersmith Tracesscatterternary Traceslayout.scenelayout.selectionslayout.shapeslayout.sliderslayout.smithsplom Tracesstreamtube Tracessunburst Tracessurface Tracestable Traceslayout.ternarytreemap Traceslayout.updatemenusviolin Tracesvolume Traceswaterfall Traceslayout.xaxislayout.yaxis
+ You can install Plotly.js from NPM via npm install plotly.js-dist or yarn add plotly.js-dist
+
+ You can also use the ultrafast plotly.js CDN link. This CDN is graciously provided by the incredible team at Fastly. +
+ +<head>
+ <script src="https://cdn.plot.ly/plotly-{{ js_version }}.min.js" charset="utf-8"></script>
+</head>
+
+ + Download the minified plotly.js source code and dependencies. +
+ ++ Include the downloaded scripts before the end of the </head> tag in your HTML document: +
+ +<head>
+ <script src="plotly-{{ js_version }}.min.js" charset="utf-8"></script>
+</head>
+
+
+ + In your HTML document, create an empty DIV to draw the graph in: +
+ +<div id="tester" style="width:600px;height:250px;"></div>
+
+
+ Now you can make interactive plotly.js charts using Plotly.newPlot().
+
<script>
+ TESTER = document.getElementById('tester');
+ Plotly.newPlot( TESTER, [{
+ x: [1, 2, 3, 4, 5],
+ y: [1, 2, 4, 8, 16] }], {
+ margin: { t: 0 } } );
+</script>
+
+
+ Now you can pass Plotly.newPlot() either the ID of the DIV ("tester") or the DIV DOM element (TESTER).
+
+
+ ++Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try + Plotly Studio now.
+
+var graphDiv = document.getElementById('id_of_the_div')
+
+var data = [{
+ x: [1999, 2000, 2001, 2002],
+ y: [10, 15, 13, 17],
+ type: 'scatter'
+}];
+
+var layout = {
+ title: {
+ text: 'Sales Growth'
+ },
+ xaxis: {
+ title: {
+ text: 'Year'
+ },
+ showgrid: false,
+ zeroline: false
+ },
+ yaxis: {
+ title: {
+ text: 'Percent'
+ },
+ showline: false
+ }
+};
+Plotly.newPlot(graphDiv, data, layout);
+
+...
+var dataRetrievedLater = graphDiv.data;
+var layoutRetrievedLater = graphDiv.layout;
+
+
+
+### Plotly.react
+
+`Plotly.react` has the same signature as [`Plotly.newPlot`](#plotlynewplot) above, and can be used in its place to create a plot, but when called again on the same `
+// restyle a single trace using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update, 0);
+
+// restyle all traces using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update);
+
+// restyle two traces using attribute strings
+var update = {
+ opacity: 0.4,
+ 'marker.color': 'red'
+};
+Plotly.restyle(graphDiv, update, [1, 2]);
+
+
+See the Pen Plotly.restyle by plotly (@plotly) on CodePen.
+ + +
+// restyle the first trace's marker color 'red' and the second's 'green'
+var update = {
+ 'marker.color': ['red', 'green']
+};
+Plotly.restyle(graphDiv, update, [0, 1])
+
+// alternate between red and green for all traces (note omission of traces)
+var update = {
+ 'marker.color': ['red', 'green']
+};
+Plotly.restyle(graphDiv, update)
+
+
+See the Pen Plotly.restyle Traces in Turn by plotly (@plotly) on CodePen.
+ +
+// update the color attribute of the first trace so that the markers within the same trace
+// have different colors
+var update = {
+ 'marker.color': [['red', 'green']]
+}
+Plotly.restyle(graphDiv, update, [0])
+
+// update two traces with new z data
+var update = {z: [[[1,2,3], [2,1,2], [1,1,1]], [[0,1,1], [0,2,1], [3,2,1]]]};
+Plotly.restyle(graphDiv, update, [1, 2])
+
+
+See the Pen Plotly.restyle Arrays by plotly (@plotly) on CodePen.
+ +{marker: {color: 'red'}} vs. {'marker.color': red}). When you pass an attribute string to restyle inside the update object, it’s assumed to mean update only this attribute. Therefore, if you wish to replace and entire sub-object, you may simply specify one less level of nesting.
+
+
+// replace the entire marker object with the one provided
+var update = {
+ marker: {color: 'red'}
+};
+Plotly.restyle(graphDiv, update, [0])
+
+
+See the Pen Plotly.restyle Attribute strings by plotly (@plotly) on CodePen.
+ +
+// Set the first trace's line to red, the second to the default, and ignore the third
+Plotly.restyle(graphDiv, {
+ 'line.color': ['red', null, undefined]
+}, [0, 1, 2])
+
+
+See the Pen null vs. undefined in Plotly.restyle by plotly (@plotly) on CodePen.
+ + +### Plotly.relayout + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +An efficient means of updating the `layout` object of an existing plot. The call signature and arguments for relayout are similar (but simpler) to restyle. Because there are no indices to deal with, arrays need not be wrapped. Also, no argument specifying applicable trace indices is passed in. + +
+// update only values within nested objects
+var update = {
+ title: {text: 'some new title'}, // updates the title
+ 'xaxis.range': [0, 5], // updates the xaxis range
+ 'yaxis.range[1]': 15 // updates the end of the yaxis range
+};
+Plotly.relayout(graphDiv, update)
+
+
+See the Pen Plotly.relayout by plotly (@plotly) on CodePen.
+ + +### Plotly.update + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +An efficient means of updating both the `data` array and `layout` object in an existing plot, basically a combination of `Plotly.restyle` and `Plotly.relayout`. + +
+//update the layout and all the traces
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update)
+
+//update the layout and a single trace
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update,0)
+
+//update the layout and two specific traces
+var layout_update = {
+ title: {text: 'some new title'}, // updates the title
+};
+var data_update = {
+ 'marker.color': 'red'
+};
+Plotly.update(graphDiv, data_update, layout_update, [0,2])
+
+
+
+
+See the Pen Plotly.update by plotly (@plotly) on CodePen.
+ + +### Plotly.validate + +`Plotly.validate` allows users to validate their input `data` array and `layout` object. This can be done on the `data` array and `layout` object passed into `Plotly.newPlot` or on an updated `graphDiv` with `Plotly.validate(graphDiv.data, graphDiv.layout)`. + +
+var data = [{
+ type: 'bar',
+ y: [2, 1, 3, 2],
+ orientation: 'horizontal'
+}];
+
+var out = Plotly.validate(data, layout);
+console.log(out[0].msg)
+// "In data trace 0, key orientation is set to an invalid value (horizontal)"
+
+
+### Plotly.makeTemplate
+
+`Plotly.makeTemplate` copies the style information from a figure. It does this by returning a `template` object which can be passed to the `layout.template` attribute of another figure.
+
+
+var figure = {
+ data: [{
+ type: 'bar',
+ marker: {color: 'red'},
+ y: [2, 1, 3, 2],
+ }],
+ layout:{
+ title: {
+ text: 'Quarterly Earnings'
+ }
+ }
+};
+
+var template = Plotly.makeTemplate(figure);
+
+var newData = [{
+ type:'bar',
+ y:[3,2,5,8]
+}]
+
+var layout = {template:template}
+
+Plotly.newPlot(graphDiv,newData,layout)
+
+
+
+### Plotly.validateTemplate
+
+`Plotly.validateTemplate` allows users to Test for consistency between the given figure and a template,
+either already included in the figure or given separately. Note that not every issue identified here is necessarily
+a problem, it depends on what you're using the template for.
+
+
+var out = Plotly.validateTemplate(figure, template);
+console.log(out[0].msg)
+// "The template has 1 traces of type bar but there are none in the data."
+
+
+### Plotly.addTraces
+
+*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).*
+
+This allows you to add **new** traces to an existing `graphDiv` at any location in its [data array](#retrieving-data-layout). Every `graphDiv` object has a `data` component which is an array of JSON blobs that each describe one trace. The full list of trace types can be found [in the Full Reference](/reference/index.md).
+
+
+// add a single trace to an existing graphDiv
+Plotly.addTraces(graphDiv, {y: [2,1,2]});
+
+// add two traces
+Plotly.addTraces(graphDiv, [{y: [2,1,2]}, {y: [4, 5, 7]}]);
+
+// add a trace at the beginning of the data array
+Plotly.addTraces(graphDiv, {y: [1, 5, 7]}, 0);
+
+
+See the Pen Plotly.addtraces by plotly (@plotly) on CodePen.
+ + +### Plotly.deleteTraces + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +This allows you to remove traces from an existing `graphDiv` by specifying the indices of the traces to be removed. + +
+// remove the first trace
+Plotly.deleteTraces(graphDiv, 0);
+
+// remove the last two traces
+Plotly.deleteTraces(graphDiv, [-2, -1]);
+
+
+See the Pen Plotly.deleteTraces by plotly (@plotly) on CodePen.
+ + +### Plotly.moveTraces + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +This allows you to reorder traces in an existing `graphDiv`. This will change the ordering of the layering and the legend. + +All traces defined in `graphDiv` are ordered in an array. They are drawn one by one from first to last. Each time a new layer or trace is drawn to the canvas the new trace is drawn directly over the current canvas, replacing the colors of the traces and background. This algorithm to image stacking/drawing is known as the [Painter's Algorithm](https://www.youtube.com/watch?v=oMgOR3PxmDU). As its name implies the Painter's Algorithm is typically the manner in which a painter paints a landscape, starting from objects with the most perspective depth and progressively moving forward and layering over the background objects. + +
+// move the first trace (at index 0) the the end of the data array
+Plotly.moveTraces(graphDiv, 0);
+
+// move selected traces (at indices [0, 3, 5]) to the end of the data array
+Plotly.moveTraces(graphDiv, [0, 3, 5]);
+
+// move last trace (at index -1) to the beginning of the data array (index 0)
+Plotly.moveTraces(graphDiv, -1, 0);
+
+// move selected traces (at indices [1, 4, 5]) to new indices [0, 3, 2]
+Plotly.moveTraces(graphDiv, [1, 4, 5], [0, 3, 2]);
+
+
+See the Pen Plotly.moveTraces by plotly (@plotly) on CodePen.
+ + +### Plotly.extendTraces + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +This allows you to add data to traces in an existing `graphDiv`. + +
+// extend one trace
+Plotly.extendTraces(graphDiv, {y: [[rand()]]}, [0])
+
+// extend multiple traces
+Plotly.extendTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1])
+
+// extend multiple traces up to a maximum of 10 points per trace
+Plotly.extendTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1], 10)
+
+
+See the Pen Plotly.extendTraces by plotly (@plotly) on CodePen.
+ + +### Plotly.prependTraces + +*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).* + +This allows you to prepend data to an existing trace `graphDiv`. + +
+// prepend one trace
+Plotly.prependTraces(graphDiv, {y: [[rand()]]}, [0])
+
+// prepend multiple traces
+Plotly.prependTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1])
+
+// prepend multiple traces up to a maximum of 10 points per trace
+Plotly.prependTraces(graphDiv, {y: [[rand()], [rand()]]}, [0, 1], 10)
+
+
+### Plotly.addFrames
+
+*This function has comparable performance to [`Plotly.react`](#plotlyreact) and is faster than redrawing the whole plot with [`Plotly.newPlot`](#plotlynewplot).*
+
+This allows you to add animation frames to a `graphDiv`. The `group` or `name` attribute of a frame can be used by [Plotly.animate](#plotlyanimate) in place of a frame object (or array of frame objects). See [example here](gapminder-example.md).
+
+
+### Plotly.animate
+
+Add dynamic behaviour to plotly graphs with `Plotly.animate`.
+
+
+Plotly.newPlot('graph', [{
+ x: [1, 2, 3],
+ y: [0, 0.5, 1],
+ line: {simplify: false},
+}]);
+
+function randomize() {
+ Plotly.animate('graph', {
+ data: [{y: [Math.random(), Math.random(), Math.random()]}],
+ traces: [0],
+ layout: {}
+ }, {
+ transition: {
+ duration: 500,
+ easing: 'cubic-in-out'
+ },
+ frame: {
+ duration: 500
+ }
+ })
+}
+
+
+See the Pen Plotly.animate by plotly (@plotly) on CodePen.
+ + + +### Plotly.purge + +Using `purge` will clear the div, and remove any Plotly plots that have been placed in it. + +
+// purge will be used on the div that you wish clear of Plotly plots
+Plotly.purge(graphDiv);
+
+
+See the Pen Plotly.purge by plotly (@plotly) on CodePen.
+ + +### Plotly.toImage + +`toImage` will generate a promise to an image of the plot in data URL format. + +
+// Plotly.toImage will turn the plot in the given div into a data URL string
+// toImage takes the div as the first argument and an object specifying image properties as the other
+Plotly.toImage(graphDiv, {format: 'png', width: 800, height: 600}).then(function(dataUrl) {
+ // use the dataUrl
+})
+
+
+See the Pen Plotly.toImage by plotly (@plotly) on CodePen.
+ + +### Plotly.downloadImage + +`downloadImage` will trigger a request to download the image of a Plotly plot. + +
+// downloadImage will accept the div as the first argument and an object specifying image properties as the other
+Plotly.downloadImage(graphDiv, {format: 'png', width: 800, height: 600, filename: 'newplot'});
+
+
+See the Pen Plotly.toImage by plotly (@plotly) on CodePen.
+ + +### Using events + +Plots emit events prefixed withplotly_ when clicked or hovered over, and event handlers can be bound to events using the on method that is exposed by the plot div object. For more information and examples of how to use Plotly events see: [https://plotly.com/javascript/plotlyjs-events/](plotlyjs-events.md).
diff --git a/pages/polar-chart.md b/pages/polar-chart.md
new file mode 100644
index 00000000000..35c2f2bb303
--- /dev/null
+++ b/pages/polar-chart.md
@@ -0,0 +1,2 @@
+# polar-chart
+--8<-- "javascript/polar-chart/index.html"
diff --git a/pages/radar-chart.md b/pages/radar-chart.md
new file mode 100644
index 00000000000..feb3c0e40b8
--- /dev/null
+++ b/pages/radar-chart.md
@@ -0,0 +1,2 @@
+# radar-chart
+--8<-- "javascript/radar-chart/index.html"
diff --git a/pages/range-slider.md b/pages/range-slider.md
new file mode 100644
index 00000000000..312404f508e
--- /dev/null
+++ b/pages/range-slider.md
@@ -0,0 +1,2 @@
+# range-slider
+--8<-- "javascript/range-slider/index.html"
diff --git a/pages/react.md b/pages/react.md
new file mode 100644
index 00000000000..5892d8bdd3a
--- /dev/null
+++ b/pages/react.md
@@ -0,0 +1,2 @@
+# react
+--8<-- "javascript/react/index.html"
diff --git a/pages/reference/bar.md b/pages/reference/bar.md
new file mode 100644
index 00000000000..c96c3b54249
--- /dev/null
+++ b/pages/reference/bar.md
@@ -0,0 +1,2 @@
+# bar
+--8<-- "reference/bar/index.html"
diff --git a/pages/reference/barpolar.md b/pages/reference/barpolar.md
new file mode 100644
index 00000000000..0a5ae637b54
--- /dev/null
+++ b/pages/reference/barpolar.md
@@ -0,0 +1,2 @@
+# barpolar
+--8<-- "reference/barpolar/index.html"
diff --git a/pages/reference/box.md b/pages/reference/box.md
new file mode 100644
index 00000000000..fbbcacb6eb1
--- /dev/null
+++ b/pages/reference/box.md
@@ -0,0 +1,2 @@
+# box
+--8<-- "reference/box/index.html"
diff --git a/pages/reference/candlestick.md b/pages/reference/candlestick.md
new file mode 100644
index 00000000000..532a27941c1
--- /dev/null
+++ b/pages/reference/candlestick.md
@@ -0,0 +1,2 @@
+# candlestick
+--8<-- "reference/candlestick/index.html"
diff --git a/pages/reference/carpet.md b/pages/reference/carpet.md
new file mode 100644
index 00000000000..72ba3589fd5
--- /dev/null
+++ b/pages/reference/carpet.md
@@ -0,0 +1,2 @@
+# carpet
+--8<-- "reference/carpet/index.html"
diff --git a/pages/reference/choropleth.md b/pages/reference/choropleth.md
new file mode 100644
index 00000000000..afe47d1b106
--- /dev/null
+++ b/pages/reference/choropleth.md
@@ -0,0 +1,2 @@
+# choropleth
+--8<-- "reference/choropleth/index.html"
diff --git a/pages/reference/choroplethmap.md b/pages/reference/choroplethmap.md
new file mode 100644
index 00000000000..f03e2526626
--- /dev/null
+++ b/pages/reference/choroplethmap.md
@@ -0,0 +1,2 @@
+# choroplethmap
+--8<-- "reference/choroplethmap/index.html"
diff --git a/pages/reference/choroplethmapbox.md b/pages/reference/choroplethmapbox.md
new file mode 100644
index 00000000000..d29374ec55d
--- /dev/null
+++ b/pages/reference/choroplethmapbox.md
@@ -0,0 +1,2 @@
+# choroplethmapbox
+--8<-- "reference/choroplethmapbox/index.html"
diff --git a/pages/reference/cone.md b/pages/reference/cone.md
new file mode 100644
index 00000000000..04753a94331
--- /dev/null
+++ b/pages/reference/cone.md
@@ -0,0 +1,2 @@
+# cone
+--8<-- "reference/cone/index.html"
diff --git a/pages/reference/contour.md b/pages/reference/contour.md
new file mode 100644
index 00000000000..56f14909fe2
--- /dev/null
+++ b/pages/reference/contour.md
@@ -0,0 +1,2 @@
+# contour
+--8<-- "reference/contour/index.html"
diff --git a/pages/reference/contourcarpet.md b/pages/reference/contourcarpet.md
new file mode 100644
index 00000000000..add81800520
--- /dev/null
+++ b/pages/reference/contourcarpet.md
@@ -0,0 +1,2 @@
+# contourcarpet
+--8<-- "reference/contourcarpet/index.html"
diff --git a/pages/reference/densitymap.md b/pages/reference/densitymap.md
new file mode 100644
index 00000000000..1d9972627a1
--- /dev/null
+++ b/pages/reference/densitymap.md
@@ -0,0 +1,2 @@
+# densitymap
+--8<-- "reference/densitymap/index.html"
diff --git a/pages/reference/densitymapbox.md b/pages/reference/densitymapbox.md
new file mode 100644
index 00000000000..de7d2042587
--- /dev/null
+++ b/pages/reference/densitymapbox.md
@@ -0,0 +1,2 @@
+# densitymapbox
+--8<-- "reference/densitymapbox/index.html"
diff --git a/pages/reference/funnel.md b/pages/reference/funnel.md
new file mode 100644
index 00000000000..55e7f464376
--- /dev/null
+++ b/pages/reference/funnel.md
@@ -0,0 +1,2 @@
+# funnel
+--8<-- "reference/funnel/index.html"
diff --git a/pages/reference/funnelarea.md b/pages/reference/funnelarea.md
new file mode 100644
index 00000000000..64644d30746
--- /dev/null
+++ b/pages/reference/funnelarea.md
@@ -0,0 +1,2 @@
+# funnelarea
+--8<-- "reference/funnelarea/index.html"
diff --git a/pages/reference/heatmap.md b/pages/reference/heatmap.md
new file mode 100644
index 00000000000..5283ac35c38
--- /dev/null
+++ b/pages/reference/heatmap.md
@@ -0,0 +1,2 @@
+# heatmap
+--8<-- "reference/heatmap/index.html"
diff --git a/pages/reference/histogram.md b/pages/reference/histogram.md
new file mode 100644
index 00000000000..b57c4ad99fe
--- /dev/null
+++ b/pages/reference/histogram.md
@@ -0,0 +1,2 @@
+# histogram
+--8<-- "reference/histogram/index.html"
diff --git a/pages/reference/histogram2d.md b/pages/reference/histogram2d.md
new file mode 100644
index 00000000000..7936a555435
--- /dev/null
+++ b/pages/reference/histogram2d.md
@@ -0,0 +1,2 @@
+# histogram2d
+--8<-- "reference/histogram2d/index.html"
diff --git a/pages/reference/histogram2dcontour.md b/pages/reference/histogram2dcontour.md
new file mode 100644
index 00000000000..817aec57052
--- /dev/null
+++ b/pages/reference/histogram2dcontour.md
@@ -0,0 +1,2 @@
+# histogram2dcontour
+--8<-- "reference/histogram2dcontour/index.html"
diff --git a/pages/reference/icicle.md b/pages/reference/icicle.md
new file mode 100644
index 00000000000..506de166f39
--- /dev/null
+++ b/pages/reference/icicle.md
@@ -0,0 +1,2 @@
+# icicle
+--8<-- "reference/icicle/index.html"
diff --git a/pages/reference/image.md b/pages/reference/image.md
new file mode 100644
index 00000000000..b0504e69818
--- /dev/null
+++ b/pages/reference/image.md
@@ -0,0 +1,2 @@
+# image
+--8<-- "reference/image/index.html"
diff --git a/pages/reference/index.md b/pages/reference/index.md
new file mode 100644
index 00000000000..74e79df6a71
--- /dev/null
+++ b/pages/reference/index.md
@@ -0,0 +1,125 @@
+## Core Objects
+
+### [Layout](layout.md)
+
+
+## Simple Traces
+
+### [Bar](bar.md)
+
+### [Contour](contour.md)
+
+### [Heatmap](heatmap.md)
+
+### [Image](image.md)
+
+### [Pie](pie.md)
+
+### [Scatter](scatter.md)
+
+### [Scatter GL](scattergl.md)
+
+### [Table](table.md)
+
+
+## Distribution Traces
+
+### [Box](box.md)
+
+### [Histogram](histogram.md)
+
+### [Histogram 2D](histogram2d.md)
+
+### [Histogram 2D Contour](histogram2dcontour.md)
+
+### [Violin](violin.md)
+
+
+
+## Finance Traces
+
+### [Candlestick](candlestick.md)
+
+### [Funnel](funnel.md)
+
+### [Funnel Area](funnelarea.md)
+
+### [Indicator](indicator.md)
+
+### [OHLC](ohlc.md)
+
+### [Waterfall](waterfall.md)
+
+
+
+## 3D Traces
+
+### [Cone](cone.md)
+
+### [Isosurface](isosurface.md)
+
+### [Mesh 3D](mesh3d.md)
+
+### [Scatter 3D](scatter3d.md)
+
+### [Streamtube](streamtube.md)
+
+### [Surface](surface.md)
+
+### [Volume](volume.md)
+
+
+## Map Traces
+
+
+### [Choropleth](choropleth.md)
+
+### [Choropleth Map](choroplethmap.md)
+
+### [Choropleth Mapbox](choroplethmapbox.md)
+
+### [Density Map](densitymap.md)
+
+### [Density Mapbox](densitymapbox.md)
+
+### [Scatter Geo](scattergeo.md)
+
+### [Scatter Map](scattermap.md)
+
+### [Scatter Mapbox](scattermapbox.md)
+
+
+## Specialized Traces:
+
+### [Bar Polar](barpolar.md)
+
+### [Carpet](carpet.md)
+
+### [Contour Carpet](contourcarpet.md)
+
+### [Icicle](icicle.md)
+
+### [Parallel Categories](parcats.md)
+
+### [Parallel Coordinates](parcoords.md)
+
+### [Sankey](sankey.md)
+
+### [Scatter Carpet](scattercarpet.md)
+
+### [Scatter Polar](scatterpolar.md)
+
+### [Scatter Polar GL](scatterpolargl.md)
+
+### [Scatter Smith](scattersmith.md)
+
+### [Scatter Ternary](scatterternary.md)
+
+### [SPLOM](splom.md)
+
+### [Sunburst](sunburst.md)
+
+### [Treemap](treemap.md)
+
+
+
diff --git a/pages/reference/index/index.md b/pages/reference/index/index.md
new file mode 100644
index 00000000000..e5971903491
--- /dev/null
+++ b/pages/reference/index/index.md
@@ -0,0 +1,53 @@
+The pages linked in the sidebar together form the exhaustive reference for all of the attributes in the core figure data structure
+that the plotly library operates on. They are automatically-generated from the
+ machine-readable Plotly.js schema reference.
+ plotly.js charts are described declaratively as JSON objects. Every aspect of a plotly chart (the colors, the grids, the data, and so on) has a corresponding JSON attribute. This page contains an extensive list of these attributes.
+
+ Plotly's graph description places attributes into two categories: traces (objects that describe a single series of data in a graph) and layout (attributes that apply to the rest of the chart, like the title, xaxis, or annotations). Traces are categorized by chart type (e.g. scatter, heatmap).
+
+ Here is a simple example of a plotly chart inlined with links to each attribute's reference section.
+
+
+data = [
+ {
+ type: 'scatter', // all "scatter" attributes: https://plotly.com/javascript/reference/#scatter
+ x: [1, 2, 3], // more about "x": #scatter-x
+ y: [3, 1, 6], // #scatter-y
+ marker: { // marker is an object, valid marker keys: #scatter-marker
+ color: 'rgb(16, 32, 77)' // more about "marker.color": #scatter-marker-color
+ }
+ },
+ {
+ type: 'bar', // all "bar" chart attributes: #bar
+ x: [1, 2, 3], // more about "x": #bar-x
+ y: [3, 1, 6], // #bar-y
+ name: 'bar chart example' // #bar-name
+ }
+];
+
+layout = { // all "layout" attributes: #layout
+ title: 'simple example', // more about "layout.title": #layout-title
+ xaxis: { // all "layout.xaxis" attributes: #layout-xaxis
+ title: 'time' // more about "layout.xaxis.title": #layout-xaxis-title
+ },
+ annotations: [ // all "annotation" attributes: #layout-annotations
+ {
+ text: 'simple annotation', // #layout-annotations-text
+ x: 0, // #layout-annotations-x
+ xref: 'paper', // #layout-annotations-xref
+ y: 0, // #layout-annotations-y
+ yref: 'paper' // #layout-annotations-yref
+ }
+ ]
+}
+
+
+
+