plotly.js is a free, open source business intelligence & reporting project written in JavaScript and released under MIT. It has 18,337 GitHub stars, 2,031 forks and 769 open issues, and was last pushed 36 hours ago. On this registry it ranks #10 of 34 tracked projects in Business Intelligence & Reporting, with 5 head-to-head comparisons available. It gained 4 stars over the last 3 tracked days.

What is plotly.js?

Plotly.js is an open-source JavaScript charting library that renders interactive figures in the browser and also powers the Python and R packages named plotly in those ecosystems.

What it is

Plotly.js is a standalone JavaScript data visualization library distributed under the MIT license, with roughly 18,300 stars and 2,000 forks on GitHub. It lives in the JavaScript and npm ecosystem, sits on top of d3 and regl, and uses WebGL for rendering. It is the engine behind Plotly.py and Plotly.R, so the same figure definition produces the same chart in a browser, a Python notebook, or an R session.

The concrete problem it solves is the gap between a dataset and an interactive chart in a web page. Instead of writing per-chart drawing code, a developer describes a figure as a JSON object with data and layout keys and hands it to a single method — Plotly.newPlot("gd", { "data": [{ "y": [1, 2, 3] }], "layout": { "width": 600, "height": 400 } }) — which draws it into a target div. That replaces the hand-rolled, framework-specific charting code that otherwise has to be written and maintained separately for each chart type and each page.

Key capabilities

  • Produces dozens of chart types, including statistical charts, 3D graphs, scientific charts, financial charts, SVG maps, and tile maps.
  • Renders through WebGL where needed, using regl as the underlying drawing layer.
  • Installs as a node module with npm i --save plotly.js-dist-min, or as the unminified plotly.js-dist package.
  • Loads from a script tag or by native ES6 import, for example import "https://cdn.plot.ly/plotly-4.1.1.min.js", served through a free Fastly-backed CDN.
  • Renders mathematical expressions written between $..$ using MathJax v3 or v4, applying to plot titles, axis labels, tick label text, and annotations.
  • Requires the exact version in the CDN URL for v2 and later, because the plotly-latest outputs stopped being updated and remain at v1.58.5.
  • Works from plain HTML and JSON knowledge alone, with or without JavaScript.

Who uses it and how

  • Python and R users who call Plotly.py or Plotly.R and get the browser renderer without writing JavaScript.
  • Teams building Plotly Dash applications, where plotly.js is the rendering layer behind the dashboards.
  • Analysts and engineers who need scientific, 3D, or financial charts inside a web application and would otherwise build each one by hand.
  • Documentation authors and notebook users who combine charts with typeset mathematics, loading MathJax separately as a page script.
  • Front-end developers who embed a pinned CDN build or bundle a distributed package into an existing build pipeline.

Getting started

Install the distributed bundle with npm i --save plotly.js-dist-min and use import Plotly from 'plotly.js-dist-min', or include a versioned script from cdn.plot.ly in an HTML page and call Plotly.newPlot.

How it compares

Among the tools named in the same space, d3 is the lower-level toolkit that plotly.js builds on, offering fine-grained control at the cost of writing the drawing logic, while regl provides the WebGL layer beneath it. Plotly.js takes the opposite trade: a declarative data and layout specification covering dozens of chart types, at the price of less direct control over the rendered output.

When to use it — and when not to

A self-hoster adopting it should expect to pin an exact CDN version for v2 and later, since the rolling plotly-latest URL is frozen at v1.58.5, and to load MathJax separately if mathematical typesetting is required, since it is not part of the bundle. The repository carries 769 open issues, so teams needing quick turnaround on a niche chart edge case may find the issue tracker slow rather than the library lacking. Projects that need pixel-level control over SVG output should look at d3 directly, and projects tied to the last v1 patch should plan the version pinning before upgrading.

project readme (upstream, from github) — read inline

npm version CI MIT License

Plotly.js 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 and Plotly.R).

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.

Contact us for Plotly.js consulting, dashboard development, application integration, and feature additions.

Maintained by Plotly

Table of contents


Load as a node module

Install a ready-to-use distributed bundle

npm i --save plotly.js-dist-min

and use import or require in node.js

// ES6 module
import Plotly from 'plotly.js-dist-min'

// CommonJS
var Plotly = require('plotly.js-dist-min')

You may also consider using plotly.js-dist if you prefer using an unminified package.


Load via script tag

The script HTML element

In the examples below, the Plotly object is added to the window scope by the script tag. 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 syntax is enough to get started, i.e., with or without JavaScript! To learn and build more with plotly.js, please visit the plotly.js documentation.

<head>
    <script src="https://cdn.plot.ly/plotly-4.1.1.min.js" charset="utf-8"></script>
</head>
<body>
    <div id="gd"></div>

    <script>
        Plotly.newPlot("gd", /* JSON object */ {
            "data": [{ "y": [1, 2, 3] }],
            "layout": { "width": 600, "height": 400}
        })
    </script>
</body>

Alternatively, you may consider using native ES6 import in the script tag.

<script type="module">
    import "https://cdn.plot.ly/plotly-4.1.1.min.js"
    Plotly.newPlot("gd", [{ y: [1, 2, 3] }])
</script>

Fastly supports Plotly.js with free CDN service. Read more at .

Un-minified versions are also available on CDN

While non-minified source files may contain characters outside UTF-8, it is recommended that you specify the charset when loading those bundles.

<script src="https://cdn.plot.ly/plotly-4.1.1.js" charset="utf-8"></script>

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

plotly.js supports using MathJax v3 or v4 to render mathematical expressions within plots.

MathJax is not included in the plotly.js bundle, so it must be loaded separately as a script on the webpage.

For MathJax v4:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/tex-svg.js"></script>

For MathJax v3:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-svg.js"></script>

When MathJax is available, any string contained within $..$ signs will be rendered using the MathJax engine. This applies to plot titles, axis labels, tick label text, and annotations.

plotly.js's use of the MathJax svg renderer should not prevent using other MathJax renderers elsewhere on the page, nor will it affect the global MathJax config. See devtools/test_dashboard/index-mathjax3chtml.html for an example of a webpage which uses the MathJax chtml renderer in the main page, and also displays Plotly charts containing MathJax equations rendered as svg.

Need to have several WebGL graphs on a page?

You may simply load the virtual-webgl script for WebGL 1 (not WebGL 2) before loading other scripts.

<script src="https://unpkg.com/[email protected]/src/virtual-webgl.js"></script>

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.
  2. Custom bundles you can create yourself to optimize the size of the bundle depending on your needs. Please visit CUSTOM_BUNDLE 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 or parts of its modules similar to index-basic 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.


Documentation

Official plotly.js documentation is hosted at https://plotly.com/javascript.

These pages are generated by the Plotly graphing-library-docs repo built with Jekyll and publicly hosted on GitHub Pages. For more info about contributing to Plotly documentation, please read through contributing guidelines.


Bugs and feature requests

Have a bug or a feature request? Please open a Github issue keeping in mind the issue guidelines. You may also want to read about how changes get made to Plotly.js.


Contributing

Please read through our contributing guidelines. Included are directions for opening issues, using plotly.js in your project and notes on development.


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:

Contributor GitHub Status
Alex C. Johnson @alexcjohnson Active, Maintainer
Emily Kellison-Linn @emilykl Active, Maintainer
Cameron DeCoster @camdecoster Active, Maintainer
Mojtaba Samimi @archmoj Active, Community Contributor
My-Tien Nguyen @my-tien Active, Community Contributor
Birk Skyum @birkskyum Active, Community Contributor
Étienne Tétreault-Pinard @etpinard Hall of Fame
Antoine Roy-Gobeil @antoinerg Hall of Fame
Jack Parmer [@jackparmer](https://github.com/jack

readme truncated — read the full docs on github

Frequently asked questions

Is plotly.js free to use?

plotly.js is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does plotly.js do?

Open-source JavaScript charting library behind Plotly and Dash

What is plotly.js written in?

plotly.js is primarily written in JavaScript. Its source is publicly available at https://github.com/plotly/plotly.js, and it has 18,337 GitHub stars.