Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

Rustでグラフをplotするライブラリのまとめ

- はじめに -

Rustでグラフを描画したいと思った時に調べたクレートとその実装、機能のまとめた時のメモ。

現状はplottersを使っておけば間違いなさそうだが、目的によっては機能で選択する場合もありそう。


 

- 前提知識 -

グラフの描画までの機能としては、matplotlibのようにaxisやviewを構造体として持っているライブラリもあれば、受け取った配列をそのままgnuplotスクリプトに変換するライブラリもある。
詳細は後述するが、当然この構造に依存してインターフェースが変わったり、出来ること出来ないことがある。


plotを想定したグラフデータの出力方法は大きく3つに分かれる。
SVG等を通して画像ファイルとして出力する方法、jsやwasmやhtmlテンプレートエンジンを利用してHTMLベースで出力する方法、テキストベース(アスキーアート)として表示する方法である。

また、Jupyter NotebookのRust Kernelとして現状開発が継続しているものにevcxrというライブラリがあり、こちらに出力する事が出来るかも差別化の点に入る。
github.com


OpenCV等の画像処理系ライブラリを用いてもグラフの描画はもちろん行えるが、今回はグラフ描画を軸としたライブラリの調査であり対象とはしない。

 

- グラフ描画クレートざっくりまとめ -

2021/09/21時点での大まかな実装とライブラリをまとめる

plotters

A rust drawing library for high quality data plotting for both WASM and native, statically and realtimely 🦀 📈🚀
latest commit: 2021/09/17, star: 1.5K
github.com

以下参考に成り得る文献

plotly

Plotly for Rust
latest commit: 2021/07/15, star: 467
github.com

plotlib

Data plotting library for Rust
latest commit: 2021/02/01, star: 335
github.com

  • 非常にmatplotlibを意識したであろう実装になっている
  • 開発は滞り気味
  • Vecやndarrayに対応
  • 自前でaxisやviewの構造体を持っている
  • textでの描画、svgクレートを使った画像での描画に対応
  • matplotlibに似た思想のAPIを持つ
    • matplotlibにおけるfigure、axesがview, plotに当たる

以下参考に成り得る文献

poloto

A simple 2D plotting library that outputs graphs to SVG that can be styled using CSS.
latest commit: 2021/09/17, star: 28
github.com

以下参考に成り得る文献

rustplotlib

A pure Rust visualization library inspired by D3.js
latest commit: 2021/07/13, star: 1116
github.com

  • D3.jsをまるっとrustで書き直している
  • 描画がかなり綺麗な印象
  • 最後はsvgクレートでSVGに書き出している (.to_svg)
  • 発想としてはかなり壮大なプロジェクトだが、更新はしばらく止まっていそう
  • multiviewなどに未対応だが今後開発されるかは実装を見る限り微妙そう
    • 対応するplot形式を沢山作る方針っぽい

RustGnuplot

A Rust library for drawing plots, powered by Gnuplot
latest commit: 2021/09/01, star: 324
github.com

以下参考に成り得る文献

preexplorer

Externalize easily the plotting process from Rust to gnuplot.
latest commit: 2021/09/06, star: 4
github.com

vega_lite_4.rs

rust api for vega-lite v4
latest commit: 2021/01/22, star: 7
github.com

  • Pythonで言う所のAltair
  • Vega Lite(vega-lite.js)にJsonAPIがあるのでそれを叩くための実装を用意したもの
  • nalgebraやndarray、rulinalg等の主要な行列ライブラリに対応している
  • showtaを作っている人と同じ
    • https://github.com/procyon-rs/showata
      • HTMLを生成するためのツール
      • jupyter notebook上に描画する事を目的としている
      • tableと画像をHTMLに変換するためのツール
    • showtaを経由してevcxrで表示できる
  • version4に対応したもので、vega_lite_3.rsも存在する

dataplotlib

Scientific plotting library for Rust
latest commit: 2017/10/14, star: 57
github.com

chord_rs

Rust crate for creating beautiful interactive Chord Diagrams.
latest commit: 2021/01/07, star: 22
github.com

  • Chord Diagramsを描画するためだけのクレート
  • Chord PROなるAPIを叩くclientであり、描画機構については分からない

- アスキーアート系のクレート -

plotlib等でも対応しているが、CLIなどで扱えるようにtext形式でplotするクレートがいくつかある。以下簡単に。

plotという強気の命名がここにある

- 記事外で参考になりそうな記事 -

- おわりに -

まとめた。

Rustでデータ分析する所までやるユーザはあまりいなさそうで、定常分析や監視に使うならHTMLレンダリングは筋が良さそう。
一方plottersが一番活発に開発されているので、何を選択しましょうかという感じ。