Alternatives To Plotly
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Umami15,961117 hours ago2July 24, 2020111mitJavaScript
Umami is a simple, fast, privacy-focused alternative to Google Analytics.
Excelize15,221186a day ago177August 20, 2022102bsd-3-clauseGo
Go language library for reading and writing Microsoft Excel™ (XLAM / XLSM / XLSX / XLTM / XLTX) spreadsheets
15 hours ago43agpl-3.0Elixir
Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.
Tablesaw3,2411416a day ago78April 02, 2022119apache-2.0Java
Java dataframe and visualization library
Plotly72762 months ago9January 01, 202210otherRust
Plotly for Rust
16 days ago139May 07, 202218gpl-3.0Python
Self-hosted music scrobble database to create personal listening statistics and charts
Scale8 Tag Manager And Analytics254
10 months ago7agpl-3.0TypeScript
Website analytics, JavaScript error tracking + analytics, tag manager, data ingest endpoint creation (tracking pixels). GDPR + CCPA compliant.
2 years ago22mitJavaScript
Tool for creating statistics from a Gerrit repository
Tennis Crystal Ball150
a year ago53apache-2.0Java
Ultimate Tennis Statistics and Tennis Crystal Ball - Tennis Big Data Analysis and Prediction
8 months ago26HTML
:bar_chart: Methods of Applied Statistics Course Textbook Repository
Alternatives To Plotly
Select To Compare

Alternative Project Comparisons

Plotly for Rust

Build status Downloads Documentation Code coverage

Getting Started | Recipes | API Docs | Changelog

Table of Contents


A plotting library for Rust powered by Plotly.js.

Documentation and numerous interactive examples are available in the Book, the examples/ directory and

For changes since the last version, please consult the changelog.

Basic Usage

Add this to your Cargo.toml:

plotly = "0.8.3"

Exporting an Interactive Plot

Any figure can be saved as an HTML file using the Plot.write_html() method. These HTML files can be opened in any web browser to access the fully interactive figure.

use plotly::{Plot, Scatter};

let mut plot = Plot::new();
let trace = Scatter::new(vec![0, 1, 2], vec![2, 1, 0]);


By default, the Plotly JavaScript library will be included via CDN, which results in a smaller filesize, but slightly slower first load as the JavaScript library has to be downloaded first. To instead embed the JavaScript library (several megabytes in size) directly into the HTML file, the following can be done:

// <-- Create a `Plot` -->


If you only want to view the plot in the browser quickly, use the method.

// <-- Create a `Plot` -->; // The default web browser will open, displaying an interactive plot

Exporting a Static Image

To save a plot as a static image, the kaleido feature is required:

# Cargo.toml

plotly = { version = "0.8.3", features = ["kaleido"] }

With this feature enabled, plots can be saved as any of png, jpeg, webp, svg, pdf and eps. Note that the plot will be a static image, i.e. they will be non-interactive.

The Kaleido binary is downloaded for your system's architecture at compile time from the official Kaleido release page. This library currently supports x86_64 on Linux and Windows, and both x86_64 and aarch64 on macOS.

Exporting a simple plot looks like this:

use plotly::{ImageFormat, Plot};

let mut plot = Plot::new();
let trace = Scatter::new(vec![0, 1, 2], vec![2, 1, 0]);

plot.write_image("out.png", ImageFormat::PNG, 800, 600, 1.0);

Usage Within a Wasm Environment

Using in a Wasm-based frontend framework is possible by enabling the wasm feature:

# Cargo.toml

plotly = { version = "0.8.3", features = ["wasm"] }

First, make sure that you have the Plotly JavaScript library in your base HTML template:

 <!-- index.html -->

<!doctype html>
<html lang="en">
        <!-- snip -->
        <script src=""></script>
    <!-- snip -->

A simple Plot component would look as follows, using Yew as an example frontend framework:

use plotly::{Plot, Scatter};
use yew::prelude::*;

pub fn plot_component() -> Html {
    let p = yew_hooks::use_async::<_, _, ()>({
        let id = "plot-div";
        let mut plot = Plot::new();
        let trace = Scatter::new(vec![0, 1, 2], vec![2, 1, 0]);

        async move {
            plotly::bindings::new_plot(id, &plot).await;

        use_effect_with_deps(move |_| {
            || ()
        }, (),

    html! {
        <div id="plot-div"></div>

More detailed standalone examples can be found in the examples/ directory.

Crate Feature Flags

The following feature flags are available:


Adds plot save functionality to the following formats: png, jpeg, webp, svg, pdf and eps.


Adds trait implementations so that image::RgbImage and image::RgbaImage can be used more directly with the plotly::Image trace.


Adds support for creating plots directly using ndarray types.


Enables compilation for the wasm32-unknown-unknown target and provides access to a bindings module containing wrappers around functions exported by the plotly.js library.


  • If you've spotted a bug or would like to see a new feature, please submit an issue on the issue tracker.

  • Pull requests are welcome, see the contributing guide for more information.

License is distributed under the terms of the MIT license.

See LICENSE-MIT, and COPYRIGHT for details.

Popular Chart Projects
Popular Statistics Projects
Popular User Interface Components Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Data Visualization