Skip to content
Custom Categorical Container

Custom Categorical Container

Use this when: You need to plot bar categories from your own custom container.

Custom Categorical Container

Usage

from dataviz.core.array_like import StringSequence
from dataviz import Plot, save


struct UppercaseLabels(Copyable, Movable, StringSequence):
    """Stands in for a real-world array-like source (a dataframe
    column, a database result column) -- upper-cases each entry on the
    fly, without ever copying the underlying list into a new one
    itself.
    """

    var data: List[String]

    def __init__(out self, var data: List[String]):
        self.data = data^

    def __len__(self) -> Int:
        return len(self.data)

    def __getitem__(self, idx: Int) -> String:
        return self.data[idx].upper()


def main() raises:
    var raw: List[String] = ["mon", "tue", "wed", "thu", "fri"]
    var categories = UppercaseLabels(raw^)
    var revenue: List[Float64] = [12.0, 19.0, 8.0, 15.0, 22.0]

    var plot = (
        Plot()
        .mark_bar()
        .encode_categorical(x=categories, y=revenue)
        .labels(title="Revenue by Day", y_title="Revenue ($K)")
    )
    save(plot, "docs/src/examples/out_categorical_array_like.svg")

Related

Related recipes: Custom Numeric Container

Relevant API: Data shapes