Module aggregation

Module aggregation 

Source
Expand description

Data aggregation and downsampling for efficient chart rendering.

This module provides efficient algorithms for reducing the number of data points while preserving important characteristics of the data. This is crucial for:

  • Large datasets that exceed display resolution
  • Real-time streaming data that needs performance optimization
  • Memory-constrained embedded environments
  • Maintaining visual fidelity while reducing computational load

§Aggregation Strategies

Different strategies for combining multiple data points into a single representative point:

§Min-Max Aggregation

Preserves extremes in the data, essential for identifying peaks and troughs:

use embedded_charts::prelude::*;
use embedded_charts::data::aggregation::*;

let data = data_points![(0.0, 10.0), (1.0, 25.0), (2.0, 5.0), (3.0, 20.0)];
let config = AggregationConfig {
    strategy: AggregationStrategy::MinMax,
    target_points: 2,
    ..Default::default()
};
let aggregated: StaticDataSeries<_, 8> = data.aggregate(&config)?;
// Result preserves the minimum (5.0) and maximum (25.0) values

§Statistical Aggregation

Uses statistical measures to represent groups of data points:

use embedded_charts::prelude::*;
use embedded_charts::data::aggregation::*;

let data = data_points![(0.0, 10.0), (1.0, 20.0), (2.0, 30.0), (3.0, 40.0)];
let config = AggregationConfig {
    strategy: AggregationStrategy::Mean,
    target_points: 2,
    ..Default::default()
};
let mean_aggregated: StaticDataSeries<_, 8> = data.aggregate(&config)?;

§Downsampling Algorithms

§Largest Triangle Three Buckets (LTTB)

Advanced algorithm that preserves visual characteristics:

use embedded_charts::prelude::*;
use embedded_charts::data::aggregation::*;

let data = data_points![(0.0, 10.0), (1.0, 25.0), (2.0, 5.0), (3.0, 20.0)];
let config = DownsamplingConfig {
    max_points: 50,
    ..Default::default()
};
let downsampled: StaticDataSeries<_, 8> = data.downsample_lttb(&config)?;

§Uniform Downsampling

Simple algorithm that takes every Nth point:

use embedded_charts::prelude::*;
use embedded_charts::data::aggregation::*;

let data = data_points![(0.0, 10.0), (1.0, 25.0), (2.0, 5.0), (3.0, 20.0)];
let config = DownsamplingConfig {
    max_points: 2,
    ..Default::default()
};
let downsampled: StaticDataSeries<_, 8> = data.downsample_uniform(&config)?;

§Memory Efficiency

All aggregation operates with bounded memory usage:

  • Static allocation for intermediate calculations
  • Configurable output capacity
  • No heap allocation in no_std environments

Structs§

AggregationConfig
Configuration for data aggregation operations
DownsamplingConfig
Configuration for downsampling operations
GroupStats
Statistics calculated for a group of data points during aggregation

Enums§

AggregationStrategy
Strategy for aggregating multiple data points into a single representative point

Traits§

DataAggregation
Trait providing aggregation and downsampling capabilities for data series