A Rust API for Vega-Lite V4 to build chart with a rusty API.

Overview

Vega-Lite V4 for Rust

license version Release Doc

Actions Status codecov Dependabot Status

A Rust API for Vega-Lite V4 to build chart with a rusty API.

Similar to the Altair project in python, this crate build upon Vega-Lite specifications. Vega-Lite is a high-level grammar of interactive graphics. It provides a concise JSON syntax for rapidly generating visualizations to support analysis. Vega-Lite specifications can be compiled to Vega specifications. Those specifications are then parsed by Vega’s JavaScript runtime to generate both static images or interactive web-based views. This crate has a complete mapping of Vega-Lite 3.4 specification and can be found in src/schema.rs. With all the types and structs, it's possible to create your Rust Vegalite graph that will be serialize into a Vega-Lite JSON. Thanks to Showata the resulting visualization can be display in your Web-Browser or in a Rust Jupyter Notebook. It's also possible to use an existing Vega-Lite json and plug your data source seamlessly. This way you can leverage existing vizualisation and adapt it to your design.

Examples

In order to have a complete mapping of the Vega-Lite V4 specification the code for the schema was automaticlly generated. To help describe all the possible features a gallery of example is provided on github

To launch all examples

cargo install cargo-make
cargo make run-all-examples

Simple chart using ndarray generated data

let values: Array2<f64> = Array::random((100, 2), StandardNormal);

let chart = VegaliteBuilder::default()
    .title("Random points")
    .data(values)
    .mark(Mark::Point)
    .encoding(
        EncodingBuilder::default()
            .x(XClassBuilder::default()
                .field("data.0")
                .def_type(StandardType::Quantitative)
                .build()?)
            .y(YClassBuilder::default()
                .field("data.1")
                .def_type(StandardType::Quantitative)
                .build()?)
            .build()?,
    )
    .build()?;
chart.show()?;

Simple chart using existing json definition with new data

= Array::random((100, 2), StandardNormal); let mut chart: Vegalite = serde_json::from_str(spec)?; chart.data = values.into(); // display the chart using `showata` chart.show()?;">
// Use existing vega-lite json specification
let spec = r##"{
    "$schema": "https://vega.github.io/schema/vega-lite/v4.0.json",
    "encoding": {
        "x": {
            "field": "data.0",
            "type": "quantitative"
        },
        "y": {
            "field": "data.1",
            "type": "quantitative"
        }
    },
    "mark": "point",
    "title": "Random points"
}"##;

// Use you own data to populate the chart
let values: Array2<f64> = Array::random((100, 2), StandardNormal);
let mut chart: Vegalite = serde_json::from_str(spec)?;
chart.data = values.into();

// display the chart using `showata`
chart.show()?;

Features

name enabled by default functionnality related crate
show_vega yes can display charts in the browser or in a notebook showata
csv yes can load data from a csv csv
ndarray yes can load data from a ndarray ndarray
nalgebra no can load data from a nalgebra::Matrix nalgebra
rulinalg no can load data from a rulinalg::matrix::Matrix rulinalg

Links

Troubleshoot

Stack size

The vegalite json schema is large with lot of alternative, so the typed rust version create a large set of struct and enum (the generated source file before macro expension is 28K lines). So the size of a model in stack could be large (it's also why Box is used in the struct).

On wasm32, with the default stack size (~ 1 MB), using vegalite_4 can raise error like:

  • crash tab with SIGSEVG (on chromium based browser)
  • Uncaught (in promise) RuntimeError: memory access out of bounds or simply Uncaught (in promise) RuntimeError

The current work arround is to increase the stacksize (eg ~ 1.5 MB). For cargo based project you can add into .cargo/config file of the project:

[target.wasm32-unknown-unknown]
rustflags = [
  "-C", "link-args=-z stack-size=1500000",
]
Comments
  • RuntimeError: memory access out of bounds at vega_lite_4::schema::VegaliteBuilder::build

    RuntimeError: memory access out of bounds at vega_lite_4::schema::VegaliteBuilder::build

    First of all, thanks for this library. By reading the create's docs.rs I've been mostly able to sort things out by myself. I've been stuck on a problem though:

    Uncaught (in promise) RuntimeError: memory access out of bounds
        at core::ptr::mut_ptr::<impl *mut T>::write::hbd79f37a0f1914eb (http://localhost:8000/index.wasm:wasm-function[7714]:0x398878)
        at alloc::boxed::Box<T,A>::new_in::h0250b8b8d4a54e23 (http://localhost:8000/index.wasm:wasm-function[7116]:0x38b0dd)
        at <alloc::boxed::Box<T,A> as core::clone::Clone>::clone::h25ea53d373a203c1 (http://localhost:8000/index.wasm:wasm-function[6276]:0x376381)
        at <core::option::Option<T> as core::clone::Clone>::clone::h2b95bcd3023e7cfe (http://localhost:8000/index.wasm:wasm-function[5751]:0x3678ba)
        at vega_lite_4::schema::VegaliteBuilder::build::h4d179f9881c378f5 (http://localhost:8000/index.wasm:wasm-function[103]:0x11d2e3)
        at b4_site::build_graph::h30e51edf5139e78d (http://localhost:8000/index.wasm:wasm-function[168]:0x182a12)
        at <b4_site::Main as yew::html::Component>::view::hc7155747ddf75f9e (http://localhost:8000/index.wasm:wasm-function[455]:0x203e03)
        at <COMP as yew::html::Renderable>::render::h29c2b45f513b97e6 (http://localhost:8000/index.wasm:wasm-function[11576]:0x3db7cd)
        at <yew::html::scope::UpdateComponent<COMP> as yew::scheduler::Runnable>::run::hd519d19d79ee1594 (http://localhost:8000/index.wasm:wasm-function[216]:0x1af228)
        at yew::scheduler::Scheduler::start::h999c83794cd54047 (http://localhost:8000/index.wasm:wasm-function[773]:0x23ed57)
    

    The issue happens if I uncomment the axis related lines in the following snippet:

        let chart = VegaliteBuilder::default()
            .title("Stock price")
            .mark(DefBuilder::default()
                .def_type(Mark::Line)
                .tooltip(true)
                .build()?)
            // .data(get_historical_quotes())
            .transform(vec![
                // vega expects epoch in milliseconds
                TransformBuilder::default()
                    .calculate("datum.data[0] * 1000")
                    .transform_as("data.0.ms")
                    .build()?,
            ])
            .encoding(EdEncodingBuilder::default()
                .x(XClassBuilder::default()
                    .field("data.0.ms")
                    .title("Date")
                    .position_def_type(Type::Temporal)
                    .time_unit(TimeUnit::Utcyearmonthdate)
                    .build()?)
                .y(YClassBuilder::default()
                    .field("data.1")
                    .position_def_type(Type::Quantitative)
                    // .axis(AxisBuilder::default()
                        // .title("Quote")
                        // .format(".2e")
                        // .build()?)
                    .build()?)
                .build()?)
            .build()?
    

    The complete project is here: https://github.com/villasv/b4/tree/15627e85080ad4daeb427b2fae079ad61f329bb5/b4-site

    Am I missing something? Can you give me directions to fix this or just achieve what I want (axis & tooltip formatting)?

    opened by villasv 5
  • Stack overflow when trying to run an example

    Stack overflow when trying to run an example

    image

    My colleague was trying to use this library to generate JSON for a visualization but couldn't really get things to work. I am grateful this library exists, but is it being maintained? Either way, thank you for publishing this package!

    opened by bitemyapp 3
  • New version with `ndarray` 0.14 dependency

    New version with `ndarray` 0.14 dependency

    Could you release a new version that uses ndarray 0.14? The current version 0.3.1 breaks if you use a current ndarray for populating the data field in this library. I've seen that you already changed it in the current master.

    opened by ChristianBeilschmidt 2
  • ⬆️ Update nalgebra requirement from 0.23 to 0.27

    ⬆️ Update nalgebra requirement from 0.23 to 0.27

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.27.0]

    This removes the convert-glam and convert-glam-unchecked optional features. Instead, this adds the convert-glam013, convert-glam014, and convert-glam015 optional features for conversions targeting the versions 0.13, 0.14, and 0.15 of glam.

    Added

    • Add macros matrix!, dmatrix!, vector!, dvector!, point! for constructing matrices/vectors/points in a more convenient way. See #886 and #899.
    • Add CooMatrix::reserve to nalgebra-sparse.
    • Add basic support for serialization using rkyv. Can be enabled with the features rkyv-serialize or rkyv-serialize-no-std.

    Fixed

    • Fixed a potential unsoundness issue after deserializing an invalid DVector using serde.

    [0.26.2]

    Added

    • Conversion from an array [T; D] to an isometry Isometry<T, _, D> (as a translation).
    • Conversion from a static vector SVector<T; D> to an isometry Isometry<T, _, D> (as a translation).
    • Conversion from a point Point<T; D> to an isometry Isometry<T, _, D> (as a translation).
    • Conversion of an array [T; D] from/to a translation Translation<T, D>.
    • Conversion of a point Point<T, D> to a translation Translation<T, D>.
    • Conversion of the tuple of glam types (Vec3, Quat) from/to an Isometry2 or Isometry3.
    • Conversion of a glam type Vec2/3/4 from/to a Translation2/3/4.

    [0.26.1]

    Fix a regression introduced in 0.26.0 preventing DVector from being serialized with serde.

    [0.26.0]

    This releases integrates min-const-generics to nalgebra. See our blog post for details about this release.

    Added

    • Add type aliases for unit vector, e.g., UnitVector3.
    • Add a pow and pow_mut function to square matrices.
    • Add Cholesky::determinant to compute the determinant of a matrix decomposed with Cholesky.
    • Add the serde-serialize-no-std feature to enable serialization of static matrices/vectors with serde, but without requiring std.

    Modified

    • The serde crate isn't enabled by default now. Enable the serde-serialize or the serde-serialize-no-std features instead.
    • The Const<const D: usize> type has been introduced to represent dimensions known at compile-time. This replaces the type-level integers from typenum as well as the U1, U2, ..., U127 types from nalgebra. These U1, U2, ..., U127 are now just aliases for Const<D>, e.g., type U2 = Const<2>.

    ... (truncated)

    Commits
    • dfc8ad3 Release v0.27.0
    • de705a8 Merge pull request #900 from dimforge/glam-multiversion
    • 47a4f52 Replace unchecked glam conversion by TryFrom or checks
    • 4af979c Support multiple version of the optional glam conversion
    • ef3257b Merge pull request #899 from dimforge/point_macro
    • 0490a84 Fix typo
    • d6d2a3e Fix macros tests.
    • 8810b85 Add a point! macro for construction points
    • f9a128a Merge pull request #894 from dfarnham/dev
    • 79ef862 Fix docs on csc_data(), csc_data_mut()
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • ⬆️ Update nalgebra requirement from 0.23 to 0.26

    ⬆️ Update nalgebra requirement from 0.23 to 0.26

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.26.1]

    Fix a regression introduced in 0.26.0 preventing DVector from being serialized with serde.

    [0.26.0]

    This releases integrates min-const-generics to nalgebra. See our blog post for details about this release.

    Added

    • Add type aliases for unit vector, e.g., UnitVector3.
    • Add a pow and pow_mut function to square matrices.
    • Add Cholesky::determinant to compute the determinant of a matrix decomposed with Cholesky.
    • Add the serde-serialize-no-std feature to enable serialization of static matrices/vectors with serde, but without requiring std.

    Modified

    • The serde crate isn't enabled by default now. Enable the serde-serialize or the serde-serialize-no-std features instead.
    • The Const<const D: usize> type has been introduced to represent dimensions known at compile-time. This replaces the type-level integers from typenum as well as the U1, U2, ..., U127 types from nalgebra. These U1, U2, ..., U127 are now just aliases for Const<D>, e.g., type U2 = Const<2>.
    • The ArrayStorage now uses a standard array [[T; R]; C] instead of a GenericArray.
    • Many trait bounds were changed to accommodate const-generics. Most of these changes should be transparent wrt. non-generic code.
    • The MatrixMN alias has been deprecated. Use OMatrix or SMatrix instead.
    • The MatrixN<T, D> alias has been deprecated. Use OMatrix<T, D, D> or SMatrix instead.
    • The VectorN<T, D> alias has been deprecated. Use OVector or SVector instead.
    • The Point, Translation, Isometry, Similarity, and Transformation types now take an integer for their dimension (instead of a type-level integer).
    • The type parameter order of Isometry, Similarity, Transformation changed to put the integer dimensions in the last position (this is required by the compiler).
    • The ::new constructors of translations, points, matrices, and vectors of dimensions <= 6 are now const fn, making them usable to define constant globals. The Quaternion::new constructor is also a const fn now.

    [0.25.4]

    Fixed

    • Fix a compilation error when only the serde-serialize feature is enabled.

    [0.25.3]

    Added

    • The Vector::simd_cap_magnitude method to cap the magnitude of the a vector with SIMD components.

    [0.25.2]

    Added

    • A convert-glam cargo feature to enable implementations of From traits to convert

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • ⬆️ Update nalgebra requirement from 0.23 to 0.25

    ⬆️ Update nalgebra requirement from 0.23 to 0.25

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.25.0]

    This updates all the dependencies of nalgebra to their latest version, including:

    • rand 0.8
    • proptest 1.0
    • simba 0.4

    New crate: nalgebra-sparse

    Alongside this release of nalgebra, we are releasing nalgebra-sparse: a crate dedicated to sparse matrix computation with nalgebra. The sparse module of nalgebraitself still exists for backward compatibility but it will be deprecated soon in favor of the nalgebra-sparse crate.

    Added

    • Add UnitDualQuaternion, a dual-quaternion with unit magnitude which can be used as an isometry transformation.
    • Add UDU::new() and matrix.udu() to compute the UDU factorization of a matrix.
    • Add ColPivQR::new() and matrix.col_piv_qr() to compute the QR decomposition with column pivoting of a matrix.
    • Add from_basis_unchecked to all the rotation types. This builds a rotation from a set of basis vectors (representing the columns of the corresponding rotation matrix).
    • Add Matrix::cap_magnitude to cap the magnitude of a vector.
    • Add UnitQuaternion::append_axisangle_linearized to approximately append a rotation represented as an axis-angle to a rotation represented as an unit quaternion.
    • Mark the iterators on matrix components as DoubleEndedIter.
    • Re-export simba::simd::SimdValue at the root of the nalgebra crate.

    [0.24.0]

    Added

    • The DualQuaternion type. It is still work-in-progress but the basics are here: creation from its real and dual part, multiplication of two dual quaternions, and normalization.

    Removed

    • There is no blanket impl<T> PartialEq for Unit<T> any more. Instead, it is implemented specifically for UnitComplex, UnitQuaternion and Unit<Vector>.

    [0.23.2]

    In this release, we improved the documentation of some of the geometric types by applying changes similar to what we did in the version 0.23.1 for matrices.

    Added

    • The Isometry::inv_mul method which is a more efficient way of doing isometry1.inverse() * isometry2.

    [0.23.1]

    In this release we improved the documentation of the matrix and vector types by:

    • Grouping impl bocks logically, adding a title comment to these impl blocks.
    • Reference these impl blocks docs at the top of the documentation page for Matrix.
    • Reduce the depth of type aliasing. Now all vector and matrix types are aliases of Matrix directly (instead of being aliases for other aliases).

    [0.23.0]

    Added

    ... (truncated)

    Commits
    • 5b9b94c Release v0.25.0
    • b97a3d0 Merge pull request #837 from dimforge/proptest
    • 3270e8e Delete semaphore CI to keep only GitHub Actions.
    • abf03a7 github actions: fix yaml
    • a9558a3 github actions: split tests into separate jobs.
    • 80aa4fa Fix tests for nalgebra-sparse.
    • 258ecf2 Update Semaphore configuration
    • 1c28720 Update Semaphore configuration
    • 1aa0b91 Update Semaphore configuration
    • 9d8c347 Switch back to github actions runner.
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • ⬆️ Update nalgebra requirement from 0.23 to 0.24

    ⬆️ Update nalgebra requirement from 0.23 to 0.24

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.24.0]

    Added

    • The DualQuaternion type. It is still work-in-progress but the basics are here: creation from its real and dual part, multiplication of two dual quaternions, and normalization.

    Removed

    • There is no blanket impl<T> PartialEq for Unit<T> any more. Instead, it is implemented specifically for UnitComplex, UnitQuaternion and Unit<Vector>.

    [0.23.2]

    In this release, we improved the documentation of some of the geometric types by applying changes similar to what we did in the version 0.23.1 for matrices.

    Added

    • The Isometry::inv_mul method which is a more efficient way of doing isometry1.inverse() * isometry2.

    [0.23.1]

    In this release we improved the documentation of the matrix and vector types by:

    • Grouping impl bocks logically, adding a title comment to these impl blocks.
    • Reference these impl blocks docs at the top of the documentation page for Matrix.
    • Reduce the depth of type aliasing. Now all vector and matrix types are aliases of Matrix directly (instead of being aliases for other aliases).

    [0.23.0]

    Added

    • The .inverse_transform_unit_vector(v) was added to Rotation2/3, Isometry2/3, UnitQuaternion, and UnitComplex. It applies the corresponding rotation to a unit vector Unit<Vector2/3>.
    • The Point.map(f) and Point.apply(f) to apply a function to each component of the point, similarly to Vector.map(f) and Vector.apply(f).
    • The Quaternion::from([N; 4]) conversion to build a quaternion from an array of four elements.
    • The Isometry::from(Translation) conversion to build an isometry from a translation.
    • The Vector::ith_axis(i) which build a unit vector, e.g., Unit<Vector3<f32>> with its i-th component set to 1.0 and the others set to zero.
    • The Isometry.lerp_slerp and Isometry.try_lerp_slerp methods to interpolate between two isometries using linear interpolation for the translational part, and spherical interpolation for the rotational part.
    • The Rotation2.slerp, Rotation3.slerp, and UnitQuaternion.slerp method for spherical interpolation.

    [0.22.0]

    In this release, we are using the new version 0.2 of simba. One major change of that version is that the use of libm is now opt-in when building targetting no-std environment. If you are using floating-point operations with nalgebra in a no-std environment, you will need to enable the new libm feature of nalgebra for your code to compile again.

    Added

    • The libm feature that enables libm when building for no-std environment.
    Commits
    • b695aaa Release v0.24.0
    • c1eeaf0 Merge pull request #817 from chinedufn/dq-serde
    • b951325 Serialize DQ to [N;8]
    • d8fa3ff Merge pull request #810 from chinedufn/dual-quaternion
    • 7ec5d00 Clean up DualQuat bounds
    • 89134ef Store DQ as real and dual Quat
    • 8036c56 Introduce DualQuaternion type
    • 88145b7 Merge pull request #814 from dimforge/quaternion_partial_eq_fix
    • 44be05d Update the changelog.
    • 3899d92 Merge pull request #815 from dimforge/isometry_inv_mul
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Feature request: support for pie charts

    Feature request: support for pie charts

    Subj. Like this: https://vega.github.io/vega-lite/docs/arc.html#pie-and-donut-charts

    Currently, Mark enum does not have Arc, and feeding JSON from the Vega Lite examples to vega_lite_4 fails too with "data did not match any variant of untagged enum AnyMark".

    opened by frp 1
  • ⬆️ Update nalgebra requirement from 0.19.0 to 0.20.0

    ⬆️ Update nalgebra requirement from 0.19.0 to 0.20.0

    Updates the requirements on nalgebra to permit the latest version.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • ⬆️ Update nalgebra requirement from 0.22.0 to 0.23.0

    ⬆️ Update nalgebra requirement from 0.22.0 to 0.23.0

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.23.0] - WIP

    Added

    • The .inverse_transform_unit_vector(v) was added to Rotation2/3, Isometry2/3, UnitQuaternion, and UnitComplex. It applies the corresponding rotation to a unit vector Unit<Vector2/3>.
    • The Point.map(f) and Point.apply(f) to apply a function to each component of the point, similarly to Vector.map(f) and Vector.apply(f).
    • The Quaternion::from([N; 4]) conversion to build a quaternion from an array of four elements.
    • The Isometry::from(Translation) conversion to build an isometry from a translation.
    • The Vector::ith_axis(i) which build a unit vector, e.g., Unit<Vector3<f32>> with its i-th component set to 1.0 and the others set to zero.
    • The Isometry.lerp_slerp and Isometry.try_lerp_slerp methods to interpolate between two isometries using linear interpolation for the translational part, and spherical interpolation for the rotational part.
    • The Rotation2.slerp, Rotation3.slerp, and UnitQuaternion.slerp method for spherical interpolation.

    [0.22.0]

    In this release, we are using the new version 0.2 of simba. One major change of that version is that the use of libm is now opt-in when building targetting no-std environment. If you are using floating-point operations with nalgebra in a no-std environment, you will need to enable the new libm feature of nalgebra for your code to compile again.

    Added

    • The libm feature that enables libm when building for no-std environment.
    • The libm-force feature that enables libm even when building for a not no-std environment.
    • Cholesky::new_unchecked which build a Cholesky decomposition without checking that its input is positive-definite. It can be use with SIMD types.
    • The Default trait is now implemented for matrices, and quaternions. They are all filled with zeros, except for UnitQuaternion which is initialized with the identity.
    • Matrix exponential matrix.exp().
    • The Vector::ith(i, x) that builds a vector filled with zeros except for the i-th component set to x.

    [0.21.0]

    In this release, we are no longer relying on traits from the alga crate for our generic code. Instead, we use traits from the new simba crate which are both simpler, and allow for significant optimizations like AoSoA SIMD.

    Refer to the monthly Rustsim blogpost for details about this switch and its benefits.

    Added

    • It is now possible to use SIMD types like simba::f32x4 as scalar types for nalgebra's matrices and geometric types.

    Modified

    • Use of traits like alga::general::{RealField, ComplexField} have now been replaced by simba::scalar::{RealField, ComplexField}.
    • The implementation of traits from the alga crate (and well as the dependency to alga_) are now omitted unless the alga cargo feature is activated.

    Removed

    • The Neg unary operator is no longer implemented for UnitComplex and UnitQuaternion. This caused
    Commits
    • 1c8435c Release v0.23.0
    • 224b562 Merge pull request #781 from filnet/clippy_fixes
    • d990aff clippy: fix clippy::eq_op error (false positive)
    • 74f01d2 clippy: fix suspicious_arithmetic_impl errors (false positives)
    • 8e483a5 Fix reshaping test.
    • ce7d767 Merge branch 'neachdainn-reshape' into dev
    • e89a26c Add doc-tests for reshape_generic.
    • d7cb138 Fix warnings.
    • 7af509e Reformat the reshaping example.
    • 5b3da9e Fix typo in comment.
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • ⬆️ Update nalgebra requirement from 0.21.0 to 0.22.0

    ⬆️ Update nalgebra requirement from 0.21.0 to 0.22.0

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.22.0]

    In this release, we are using the new version 0.2 of simba. One major change of that version is that the use of libm is now opt-in when building targetting no-std environment. If you are using floating-point operations with nalgebra in a no-std environment, you will need to enable the new libm feature of nalgebra for your code to compile again.

    Added

    • The libm feature that enables libm when building for no-std environment.
    • The libm-force feature that enables libm even when building for a not no-std environment.
    • Cholesky::new_unchecked which build a Cholesky decomposition without checking that its input is positive-definite. It can be use with SIMD types.
    • The Default trait is now implemented for matrices, and quaternions. They are all filled with zeros, except for UnitQuaternion which is initialized with the identity.
    • Matrix exponential matrix.exp().
    • The Vector::ith(i, x) that builds a vector filled with zeros except for the i-th component set to x.

    [0.21.0]

    In this release, we are no longer relying on traits from the alga crate for our generic code. Instead, we use traits from the new simba crate which are both simpler, and allow for significant optimizations like AoSoA SIMD.

    Refer to the monthly Rustsim blogpost for details about this switch and its benefits.

    Added

    • It is now possible to use SIMD types like simba::f32x4 as scalar types for nalgebra's matrices and geometric types.

    Modified

    • Use of traits like alga::general::{RealField, ComplexField} have now been replaced by simba::scalar::{RealField, ComplexField}.
    • The implementation of traits from the alga crate (and well as the dependency to alga_) are now omitted unless the alga cargo feature is activated.

    Removed

    • The Neg unary operator is no longer implemented for UnitComplex and UnitQuaternion. This caused hard-to-track errors when we mistakenly write, e.g., -q * v instead of -(q * v).
    • The na::convert_unchecked is no longer marked as unsafe.

    [0.20.0]

    Added

    • cholesky.rank_one_update(...) which performs a rank-one update on the cholesky decomposition of a matrix.
    • From<&Matrix> is now implemented for matrix slices.
    • .try_set_magnitude(...) which sets the magnitude of a vector, while keeping its direction.
    • Implementations of From and Into for the conversion between matrix slices and standard (&[N] &mut [N]) slices.

    Modified

    • We started some major changes in order to allow non-Copy types to be used as scalar types inside of matrices/vectors.

    [0.19.0]

    Added

    • .remove_rows_at and remove_columns_at which removes a set of rows or columns (specified by indices) from a matrix.
    Commits
    • d635001 Release v0.22.0
    • fe4e77c Merge pull request #761 from dimforge/rapier
    • b96181f CI: don't eanble --all-features when running the tests.
    • a8f73cb Run cargo fmt.
    • a6962df Bump the simba dependency version.
    • 46d1cf2 Add a libm and libm-force feature to transitively enable the corresponding si...
    • 7c69cbf Don't depend on serde_derive explicitly.
    • 6300d34 Add the ::ith constructor for vectors.
    • d81a895 Switch license to Apache v2.0 + update sponsor link.
    • 2ab82be Merge pull request #631 from Andlon/matrixcompare
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Vega Lite 5

    Vega Lite 5

    Hi!

    I am considering creating a similar crate for Vega Lite 5, mostly for my personal usage, but will of course share it if I succeed. I noticed that the approach you took in creating this crate, was to copy the vega_lite_3, regenerate the schema and then update the API. I am willing to do that for VL5, however I'm quite new to Rust and currently working on my first project for personal use (for which I need interactive graphs), so I'd like to ask you, how much effort would you say it took you to create this crate and more importantly do you have anything against me using yours?

    Cheers

    opened by wkrasnicki 2
  • Allowing grouped bar charts

    Allowing grouped bar charts

    Creating grouped bar charts like the example at https://vega.github.io/vega-lite/examples/bar_grouped.html requires that it be possible to encode the xOffset attribute, which does not currently seem to be covered in this library.

    opened by mdlemay 2
  • ⬆️ Update nalgebra requirement from 0.23 to 0.28

    ⬆️ Update nalgebra requirement from 0.23 to 0.28

    Updates the requirements on nalgebra to permit the latest version.

    Changelog

    Sourced from nalgebra's changelog.

    [0.28.0]

    Added

    • Implement Hash for Transform.
    • Implement Borrow and BorrowMut for contiguous slices.

    Modified

    • The OPoint<T, D> type has been added. It takes the dimension number as a type-level integer (e.g. Const<3>) instead of a const-generic. The type Point<T, const D: usize> is now an alias for OPoint. This changes doesn't affect any of the existing code using Point. However, it will allow the use OPoint in a generic context where the dimension cannot be easily expressed as a const-generic (because of the current limitation of const-generics in Rust).
    • Several clippy warnings were fixed. This results in some method signature changes (e.g. taking self instead of &self) but this should not have any practical infulances on existing codebase.
    • The Point::new constructors are no longer const-fn. This is due to some limitations in const-fn not allowing custom trait-bounds. Use the point! macro instead to build points in const environments.
    • Dynamic::new and Unit::new_unchecked are now const-fn.
    • Methods returning Result<(), ()> now return bool instead.

    Fixed

    • Fixed a potential unsoundess issue when converting a mutable slice to a &mut[T].

    [0.27.1]

    Fixed

    • Fixed a bug in the conversion from glam::Vec2 or glam::DVec2 to Isometry2.

    [0.27.0]

    This removes the convert-glam and convert-glam-unchecked optional features. Instead, this adds the convert-glam013, convert-glam014, and convert-glam015 optional features for conversions targeting the versions 0.13, 0.14, and 0.15 of glam.

    Added

    • Add macros matrix!, dmatrix!, vector!, dvector!, point! for constructing matrices/vectors/points in a more convenient way. See #886 and #899.
    • Add CooMatrix::reserve to nalgebra-sparse.
    • Add basic support for serialization using rkyv. Can be enabled with the features rkyv-serialize or rkyv-serialize-no-std.

    Fixed

    • Fixed a potential unsoundness issue after deserializing an invalid DVector using serde.

    [0.26.2]

    Added

    • Conversion from an array [T; D] to an isometry Isometry<T, _, D> (as a translation).
    • Conversion from a static vector SVector<T; D> to an isometry Isometry<T, _, D> (as a translation).
    • Conversion from a point Point<T; D> to an isometry Isometry<T, _, D> (as a translation).
    • Conversion of an array [T; D] from/to a translation Translation<T, D>.
    • Conversion of a point Point<T, D> to a translation Translation<T, D>.
    • Conversion of the tuple of glam types (Vec3, Quat) from/to an Isometry2 or Isometry3.
    • Conversion of a glam type Vec2/3/4 from/to a Translation2/3/4.

    ... (truncated)

    Commits
    • 7eb5fd3 Update the changelog.
    • cce7d9e Merge pull request #937 from jsmith628/fixed-size-borrow
    • c320988 Merge pull request #944 from vadixidav/dev
    • b007e19 Merge pull request #938 from Nateckert/omatrix_to_string
    • ca1297a Release v0.28.0
    • 02e9ac4 import macros from alloc to solve issues with missing format! macro, among ot...
    • 7bcb546 Merge pull request #943 from dimforge/point_dim_name
    • ac61e11 Merge pull request #932 from CAD97/moar-const
    • 2ce6811 Fix compilation when enabling the bytemuck feature.
    • 85d07b2 FIx serde impl bounds
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Upgrade to GitHub-native Dependabot

    Upgrade to GitHub-native Dependabot

    Dependabot Preview will be shut down on August 3rd, 2021. In order to keep getting Dependabot updates, please merge this PR and migrate to GitHub-native Dependabot before then.

    Dependabot has been fully integrated into GitHub, so you no longer have to install and manage a separate app. This pull request updates your config file to the new syntax. When merged, we'll swap out dependabot-preview (me) for a new dependabot app, and you'll be all set!

    With this change, you'll now use the Dependabot page in GitHub, rather than the Dependabot dashboard, to monitor your version updates, and you'll configure Dependabot through the new config file rather than a UI.

    If you've got any questions or feedback for us, please let us know by creating an issue in the dependabot/dependabot-core repository.

    Learn more about migrating to GitHub-native Dependabot

    Please note that regular @dependabot commands do not work on this pull request.

    dependencies 
    opened by dependabot-preview[bot] 1
  • ⬆️ Update derive_builder requirement from 0.9 to 0.10

    ⬆️ Update derive_builder requirement from 0.9 to 0.10

    Updates the requirements on derive_builder to permit the latest version.

    Release notes

    Sourced from derive_builder's releases.

    v0.10.0

    • Requires Rust 1.40.0 or newer (was 1.37.0) #169
    • Logging feature is removed #177
    • Type parameters no longer have the Default bound #178
    • Make most of derive_builder_core private #189
    • Add setter(each = "name") for extension of collection-like fields #199

    This release changes how derive_builder handles errors; instead of returning a string, a structured error is now returned from build. This implements std::error::Error, making it easy to use alongside libraries such as anyhow, and it is replaceable, making it easy to drop in your library's own error instead. In addition, this approach means that builders no longer force any allocations, useful in no_std contexts.

    Commits
    • 9d2ee6f Bump version to 0.10.0
    • 6f6c0fe Update README with 0.10.0 material
    • 7cde486 Add setter(each = "...") option to extend collection-like fields (#199)
    • c72cd24 Safely support custom errors (#194)
    • ee13c51 Update all dependencies to latest
    • c86f615 Remove all mentions of Travis
    • 39b6ce6 Cumulative CHANGELOG update
    • a9259a8 Add derive_builder_macro to deploy script
    • 76b6454 Shrink derive_builder_core's public API (#189)
    • aa07ba1 Remove skeptic (#188)
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in the .dependabot/config.yml file in this repo:

    • Update frequency
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
Owner
Procyon
the vega lite ecosystem for Rust
Procyon
A library of to show data (in browser, evcxr_jupyter) as table, chart...

showata A library of to show data (in browser, evcxr_jupyter) as table, chart.... The crate provides display for: image vector and slice (as table) nd

Procyon 20 Dec 12, 2022
Data plotting library for Rust

plotlib plotlib is a generic data visualisation and plotting library for Rust. It is currently in the very early stages of development. It can current

Matt Williams 417 Dec 31, 2022
Plotly for Rust

Plotly.rs Plotly for Rust Getting Started | Recipes | API Docs | Changelog | | | A plotting library for Rust powered by Plotly.js. Usage Add this to y

Ioannis Giagkiozis 671 Jan 8, 2023
A rust drawing library for high quality data plotting for both WASM and native, statically and realtimely 🦀 📈🚀

Plotters - A Rust drawing library focus on data plotting for both WASM and native applications ?? ?? ?? Plotters is drawing library designed for rende

Hao Hou 2.7k Jan 4, 2023
This is a Rust implementation of a boid flocking simulation using the ggez graphics crate.

Boidflock This is a Rust implementation of a boid flocking simulation using the ggez graphics crate. The CLI for this program is built using the struc

Andrew Lee 12 Jan 4, 2023
A Rust library for drawing plots, powered by Gnuplot.

RustGnuplot A Gnuplot controller written in Rust. Documentation See here Examples A simple example: let mut fg = Figure::new(); fg.axes2d() .set_titl

null 353 Dec 26, 2022
Swash is a pure Rust, cross-platform crate that provides font introspection, complex text shaping and glyph rendering.

Swash is a pure Rust, cross-platform crate that provides font introspection, complex text shaping and glyph rendering. Goals This crate aims to

Chad Brokaw 398 Dec 14, 2022
Render farm simulator & plotting for optimisation written in Rust.

Farm Usage Simulator Given a few basic charasteristics of a render farm and render jobs this app runs a few randomized farm usage scenarios and plots

ford 2 Jul 17, 2022
Rust crate for creating beautiful interactive Chord Diagrams

Chord PRO Released Chord PRO is the full-featured chord visualization API, producing beautiful interactive visualizations, e.g. those featured on the

Dr. Shahin Rostami 25 Sep 10, 2022
Externalize easily the plotting process from Rust to gnuplot.

preexplorer Easy plotter and saver of simple data. Handy tool for development stage or small computational projects. Save data, have a quick view and

Raimundo Saona 4 Jan 7, 2022
A pure Rust visualization library inspired by D3.js

charts A pure Rust visualization library inspired by D3.js. See gallery and examples for code and more charts. Install You can add this as a dependenc

Iulian Gulea 186 Dec 29, 2022
A library to generate syntax diagrams for Rust macros.

Live demo (code) A browser add-on for Firefox, Chrome and Edge A library to generate syntax ("railroad") diagrams for Rust's macro_rules!(). Diagrams

null 468 Jan 6, 2023
Graphical Rust program that uses a fractal algorithm to draw a tree of sorts

rusty-vegetation Graphical Rust program that uses a fractal algorithm to draw a "tree" of sorts. To Build and Run On Linux: Install build-essentials o

Stephen G Tuggy 4 Dec 4, 2022
A Rust program for visualizing how sections get packed into your Game Boy ROM

GB Packing Visualizer A Rust program for visualizing how sections get packed into your Game Boy ROM. rhythm_land.mp4 Each column represents a ROM bank

Eldred Habert 6 Jan 31, 2022
Lightweight graphs (sparklines) for use with Embedded Rust

Sparklines for Rust's Embedded-graphics Sparklines are small, high resolution graphics embedded in a context of words, numbers or images". Edward Tuft

Bernard Kobos 4 Aug 28, 2022
Utilities for converting Vega-Lite specs from the command line and Python

VlConvert VlConvert provides a Rust library, CLI utility, and Python library for converting Vega-Lite chart specifications into static images (SVG or

Vega 24 Feb 13, 2023
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
A small charting/visualization tool and partial vega implementation for Rust

Gust A charting library for rust! Disclaimer This is still very much a work in progress! APIs are very unstable and subject to change. Contributions a

Samuel Resendez 128 Dec 24, 2022
Display candlestick chart in your terminal.

cli-candlestick-chart This module allows you to display candle charts directly in your terminal. I did this project mainly to learn Rust, so the code

Julien 178 Dec 18, 2022