#plot #plotly #chart

plotly-fork

由 Plotly.js 驱动的绘图库

1 个不稳定版本

0.8.4 2023 年 10 月 9 日

#153可视化

每月下载 29 次

MIT 许可证

4MB
11K SLoC

Plotly.rs

为 Rust 提供的 Plotly

Build status Crates.io Downloads Documentation Code coverage

入门 | 菜谱 | API 文档 | 变更日志

目录

简介

Plotly.js 驱动的 Rust 绘图库。

文档和众多交互式示例可在 Plotly.rs 书籍examples/ 目录和 docs.rs 中找到。

有关上次版本以来的更改,请参阅 变更日志

基本用法

将其添加到您的 Cargo.toml

[dependencies]
plotly = "0.8.4"

导出交互式绘图

任何图形都可以使用 Plot.write_html() 方法保存为 HTML 文件。这些 HTML 文件可以在任何网络浏览器中打开以访问完全交互式的图形。

use plotly::{Plot, Scatter};

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

plot.write_html("out.html");

默认情况下,将通过 CDN 包含 Plotly JavaScript 库,这会导致文件大小较小,但第一次加载速度略慢,因为需要先下载 JavaScript 库。要直接将 JavaScript 库(大小为几个兆字节)嵌入到 HTML 文件中,可以执行以下操作

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

plot.use_local_plotly();
plot.write_html("out.html");

如果您只想快速在浏览器中查看图形,请使用 Plot.show() 方法。

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

plot.show(); // The default web browser will open, displaying an interactive plot

导出静态图像

要将图形保存为静态图像,需要 kaleido 功能

# Cargo.toml

[dependencies]
plotly = { version = "0.8.4", features = ["kaleido"] }

启用此功能后,图形可以保存为 pngjpegwebpsvgpdfeps 等格式。请注意,图形将是静态图像,即它们将是非交互式的。

Kaleido 二进制文件在编译时从官方 Kaleido 发布页面 下载到您系统的体系结构。此库目前支持 Linux 和 Windows 上的 x86_64,以及 macOS 上的 x86_64aarch64

导出简单图形的示例如下

use plotly::{ImageFormat, Plot};

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

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

在 Wasm 环境中使用

通过启用 wasm 功能,在基于 Wasm 的前端框架中使用 Plotly.rs 是可能的。

# Cargo.toml

[dependencies]
plotly = { version = "0.8.4", features = ["wasm"] }

首先,请确保您的基 HTML 模板中包含 Plotly JavaScript 库。

 <!-- index.html -->

<!doctype html>
<html lang="en">
    <head>
        <!-- snip -->
        <script src="https://cdn.plot.ly/plotly-2.14.0.min.js"></script>
    </head>
    <!-- snip -->
</html>

以下是一个简单的 Plot 组件示例,使用 Yew 作为前端框架的示例。

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


#[function_component(PlotComponent)]
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]);
        plot.add_trace(trace);

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

    
        use_effect_with_deps(move |_| {
            p.run();
            || ()
        }, (),
    );
    

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

更详细的自包含示例可以在 examples/ 目录中找到。

包特性标志

以下是一些可用的功能标志:

kaleido

为以下格式添加了保存图表的功能:pngjpegwebpsvgpdfeps

plotly_image

添加了特质实现,以便可以更直接地使用 image::RgbImageimage::RgbaImageplotly::Image 迹。

plotly_ndarray

添加了对使用 ndarray 类型直接创建图表的支持。

wasm

启用对 wasm32-unknown-unknown 目标的编译,并提供了一个包含围绕 plotly.js 库导出函数的包装器的 bindings 模块。

贡献

  • 如果您发现了错误或想要看到新功能,请在 问题跟踪器 上提交问题。

  • 欢迎提交拉取请求,有关更多信息,请参阅 贡献指南

许可证

Plotly.rs 在 MIT 许可证的条款下分发。

有关详细信息,请参阅 LICENSE-MITCOPYRIGHT

依赖关系

~3–9MB
~131K SLoC