What is plotly.js?
Plotly.js is a high-level, declarative charting library built on D3.js and stack.gl. It enables the creation of a wide variety of interactive and publication-quality charts, including line plots, scatter plots, bar charts, histograms, heatmaps, and more. It is particularly well-suited for creating complex visualizations with minimal code.
What are plotly.js's main functionalities?
Line and Scatter Plots
This feature allows you to create line and scatter plots. The code sample demonstrates how to create a simple scatter plot with Plotly.js.
const Plotly = require('plotly.js-dist');
const data = [{
x: [1, 2, 3, 4],
y: [10, 15, 13, 17],
type: 'scatter'
}];
const layout = { title: 'Line and Scatter Plot' };
Plotly.newPlot('myDiv', data, layout);
Bar Charts
This feature allows you to create bar charts. The code sample demonstrates how to create a simple bar chart with Plotly.js.
const Plotly = require('plotly.js-dist');
const data = [{
x: ['A', 'B', 'C'],
y: [20, 14, 23],
type: 'bar'
}];
const layout = { title: 'Bar Chart' };
Plotly.newPlot('myDiv', data, layout);
Heatmaps
This feature allows you to create heatmaps. The code sample demonstrates how to create a simple heatmap with Plotly.js.
const Plotly = require('plotly.js-dist');
const data = [{
z: [[1, 20, 30], [20, 1, 60], [30, 60, 1]],
type: 'heatmap'
}];
const layout = { title: 'Heatmap' };
Plotly.newPlot('myDiv', data, layout);
3D Surface Plots
This feature allows you to create 3D surface plots. The code sample demonstrates how to create a simple 3D surface plot with Plotly.js.
const Plotly = require('plotly.js-dist');
const data = [{
z: [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
type: 'surface'
}];
const layout = { title: '3D Surface Plot' };
Plotly.newPlot('myDiv', data, layout);
Pie Charts
This feature allows you to create pie charts. The code sample demonstrates how to create a simple pie chart with Plotly.js.
const Plotly = require('plotly.js-dist');
const data = [{
values: [19, 26, 55],
labels: ['A', 'B', 'C'],
type: 'pie'
}];
const layout = { title: 'Pie Chart' };
Plotly.newPlot('myDiv', data, layout);
Other packages similar to plotly.js
chart.js
Chart.js is a simple yet flexible JavaScript charting library for designers & developers. It offers a good variety of chart types and is known for its ease of use and integration. Compared to Plotly.js, Chart.js is more lightweight but may lack some of the advanced features and customization options.
highcharts
Highcharts is a charting library written in pure JavaScript, offering an easy way of adding interactive charts to your web site or web application. Highcharts is known for its rich feature set and extensive documentation. It is comparable to Plotly.js in terms of functionality but is often used in commercial applications due to its licensing model.
d3
D3.js is a JavaScript library for producing dynamic, interactive data visualizations in web browsers. It uses SVG, HTML, and CSS. D3.js is highly flexible and powerful but has a steeper learning curve compared to Plotly.js, which abstracts many of the complexities of D3.js.
echarts
ECharts is a free, powerful charting and visualization library offering an easy way of adding intuitive, interactive, and highly customizable charts. It is similar to Plotly.js in terms of functionality and is known for its performance and ease of use.
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.
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
import Plotly from 'plotly.js-dist-min'
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 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 syntax is enough to get started i.e. with/without JavaScript! To learn and build more with plotly.js please visit plotly.js documentation.
<head>
<script src="https://cdn.plot.ly/plotly-2.5.1.min.js"></script>
</head>
<body>
<div id="gd"></div>
<script>
Plotly.newPlot("gd", {
"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-2.5.1.min.js"
Plotly.newPlot("gd", [{ y: [1, 2, 3] }])
</script>
Fastly supports Plotly.js with free CDN service. Read more at https://www.fastly.com/open-source.
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-2.5.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.
To support MathJax, you need to load version two of MathJax e.g. v2.7.5
files from CDN or npm.
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG.js"></script>
Bundles
There are two kinds of plotly.js bundles:
- Complete and partial official bundles that are distributed to
npm
and the CDN
, described in the dist README. - Custom bundles you can create yourself to optimize the size of 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 of browserify
or webpack
, etc. 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:
Copyright and license
Code and documentation copyright 2021 Plotly, Inc.
Code released under the MIT license.
Versioning
This project is maintained under the Semantic Versioning guidelines.
See the Releases section of our GitHub project for changelogs for each release version of plotly.js.
- Follow @plotlygraphs on Twitter for the latest Plotly news.
- Implementation help may be found on community.plot.com (tagged
plotly-js
) or
on Stack Overflow (tagged plotly
). - Developers should use the keyword
plotly
on packages which modify or add to the functionality of plotly.js when distributing through npm.