14个版本 (7个重大更新)

0.9.0 2024年6月29日
0.8.4 2023年7月9日
0.8.3 2022年11月6日
0.7.0 2022年1月1日
0.4.1 2020年3月26日

#2 in 可视化

Download history 2119/week @ 2024-05-04 2022/week @ 2024-05-11 2366/week @ 2024-05-18 2209/week @ 2024-05-25 2362/week @ 2024-06-01 2786/week @ 2024-06-08 2461/week @ 2024-06-15 2799/week @ 2024-06-22 3126/week @ 2024-06-29 3404/week @ 2024-07-06 3299/week @ 2024-07-13 3527/week @ 2024-07-20 3504/week @ 2024-07-27 3385/week @ 2024-08-03 3552/week @ 2024-08-10 3096/week @ 2024-08-17

每月下载量14,238
33 个crate中使用

MIT许可协议

4MB
12K SLoC

Plotly.rs

Plotly for Rust

Build status Crates.io Downloads Documentation Code coverage

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

目录

简介

一个由Plotly.js驱动的Rust绘图库。

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

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

基本用法

将其添加到您的Cargo.toml

[dependencies]
plotly = "0.9.0"

导出交互式图表

任何图形都可以使用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");

默认情况下,Plotly JavaScript库将通过CDN包含,这会导致文件大小较小,但首次加载会略微变慢,因为必须首先下载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.9.0", 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.9.0", 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/目录中找到。

crate功能标志

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

kaleido

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

plotly_image

添加了特性行为,以便可以使用image::RgbImageimage::RgbaImage更直接地与plotly::Image轨迹一起使用。

plotly_ndarray

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

wasm

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

贡献

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

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

许可协议

Plotly.rs根据MIT许可证条款分发。

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

依赖项

~3–16MB
~175K SLoC