#plot #macroquad #graph #graphing #graph-node

graplot

基于macroquad的实验性绘图库

16个版本

0.1.22 2023年1月2日
0.1.21 2022年8月26日
0.1.20 2022年7月17日
0.1.19 2022年6月24日
0.1.12 2022年4月29日

#32可视化

每月35次下载
用于 3 crates

MIT/Apache

220KB
2K SLoC

graplot

Crates.io version Docs

'graplot' 是一个基于 Rust 编写的实验性绘图库,它基于 macroquad (内部为 litequad)。它创建一个显示图表的窗口。

安装

将 'graplot' 添加为依赖项

[dependencies]
graplot = "0.1.22"

示例

use graplot::Plot;

let plot = Plot::new([-4., -2., 1., 4.]);
plot.show();
first plot example

3D线图

use graplot::Plot3D;

let xs = [0.,1.,2.,3.,4.,5.,6.];
let ys = [0.,1.,4.,9.,16.,25.,36.];
let zs = [0.,1.,4.,9.,16.,25.,36.];

// move with: W, A, S, D
let plot = Plot3D::new((xs, ys, zs, "r-o"));
plot.show();
3d line plot example

多个图表

use graplot::Plot;

let xs = [1., 2., 3.,];
let ys = [1.7, 3., 1.9];

let ys1 = [1.4, 1.6, 1.5];    

let ys2 = [0.9, 1.2, 1.7, 1.9, 2.];    

let mut plot = Plot::new((xs, ys));
plot.add((xs, ys1, "c-o"));
plot.add((ys2, "r-"));
plot.show();
multiple graphs

标注x轴和y轴并设置标题

use graplot::{x, Plot};

let mut plot = Plot::new((|x: f64| x.cos(), x(6.)));

plot.set_title("cosine wave");

plot.set_xlabel("x axis");
plot.set_ylabel("y axis");
plot.show();
cosine labeled

Collatz猜想:

collatz conjecture

绘制饼图

use graplot::Pie;

// without labels: let pie = Pie::new([35., 25., 25., 15.]);
let draw = [(35., "label"), (25., "len"), (25., "labeled"), (15., "test")];
let pie = Pie::new(draw);
pie.show();
pie chart

正弦波

use graplot::Plot;

let mut xs = [0.; 1000]; 

let mut add = 0f64;
for idx in 0..1000 {
    xs[idx] = add/1000.;
    add += 1.;
}
    
let mut ys = [0.; 1000];
for (i, y) in ys.iter_mut().enumerate() {
    *y = (2. * std::f64::consts::PI * xs[i]).sin();
}
// or alternatively: let plot = Plot::new((|x: f64| x.sin(), x(4.)));
let plot = Plot::new((xs, ys));
plot.show();
sine wave example

x³ + x² - 0.08

use graplot::{Plot, x};

// x(...) ... sets the absolute max value for x 
let plot = Plot::new((|x: f64| x.powf(3.) + x.powf(2.) - 0.08, x(1.)) );
plot.show();
pol3

x² - 0.5

use graplot::Plot;

let plot = Plot::new(|x: f64| x.powf(2.) - 0.5);
plot.show();
x squared example

使用 Polynomial 结构体或 polynomial() 函数创建一个通过所有给定点的多项式函数

use graplot::{x, Plot, Polynomial};

let poly = Polynomial::new(&[2., 3., 1.], &[2., 3., 2.]);
let plot = Plot::new((poly, x(10.)));
plot.show();
polynomial functions runs through 3 points

绘制条形图

use graplot::Bar;

let mut bar = Bar::new(["Ferris", "Stefan", "Test"], &[100., 200., 700.]);
bar.set_title("title");
bar.set_xlabel("test");
bar.show();
bar graph

使用线描述: (matplotlib)

use graplot::Plot;

// c ... cyan color, - ... solid line, o ... ring marker
let plot = Plot::new(([-4., -3., -3.4, -3.75, -4.1], "c-o"));
plot.show();
line desc example

使用节点和边绘制图表

use graplot::{Graph, RED, graph::GraphDesc, Color};

let mut graph = Graph::new();
graph.graph_desc = GraphDesc {
    node_color: RED,
    outer_ring: (Color::new(1., 0.5, 0.8, 1.), 3.5),
    ..Default::default()
};
let a = graph.add_node(vec![]);
let b = graph.add_node(vec![]);
let c = graph.add_node(vec![]);

let d = graph.add_node(vec![a.idx, b.idx]);
let e = graph.add_node(vec![a.idx, c.idx]);

graph.add_node(vec![d.idx, e.idx, b.idx]);

graph.show();
graph

自定义缩放

use graplot::{Desc, Plot, x};

let mut plot = Plot::new((|x: f64| x.cos(), x(2.)));
plot.set_desc(Desc {
    min_steps_x: 6.,
    spacing_x: 47.,
    ..Default::default()
});
plot.show();

在Linux上创建多个窗口 (目前不可用)

let mut plot = Plot::new(|x: f64| x.powf(3.) + x.powf(2.) - 0.08);
plot.set_title("x^3 + x^2 - 0.08");
let h = plot.show_threaded() // show_threaded() is currently linux only;

let mut plot = Plot::new(|x: f64| x.powf(2.) + 0.08);
plot.set_title("");
plot.show();

h.join().unwrap() // you need to close both windows
multiple windows

更新日志

  • 0.1.22:添加了 ToF64
  • 0.1.22:添加了图表(节点、边)
  • 0.1.19:负值条形图
  • 0.1.18:修复了错误
  • 0.1.17:基本3D绘图
  • 0.1.16:着色
  • 0.1.15:更简单的彩色条形图
  • 0.1.14: ???
  • 0.1.13:添加了饼图
  • 0.1.12:添加了条形图
  • 0.1.11:添加了散点图
  • 0.1.10:使用一组点创建多项式函数
  • 0.1.9:修复了错误
  • 0.1.8:设置颜色现在使用3个参数,修复了步长大小
  • 0.1.7:设置图表颜色,自定义x & y "线"间距和步长大小 | "自定义缩放"
  • 0.1.6:标注x轴,litequad
  • 0.1.5:y轴,设置标题,/在Linux上的多个窗口/ | 已撤回
  • 0.1.4:多个图表

依赖项

~8MB
~194K SLoC