Skip to content
github-actions[bot] edited this page May 26, 2026 · 19 revisions

FastPlot

Ultra‑fast time series plotting for MATLAB and GNU Octave with dynamic downsampling, sensor monitoring, and dashboard layouts.

Key Metrics

Metric Value
10M point zoom cycle 4.7 ms (212 FPS)
Point reduction 99.96% (10M to ~4K displayed)
GPU memory (10M pts) 0.06 MB vs 153 MB for plot()
Implementation Pure MATLAB + optional C MEX (AVX2 / NEON SIMD)
Minimum MATLAB version R2020b+ (Octave 7+)
Toolbox dependencies None

Library Components

FastPlot consists of five integrated libraries:

Library Description
FastSense Core plotting engine with dynamic MinMax / LTTB downsampling, pyramid cache, linked zoom, threshold lines, live mode, disk‑backed storage (FastSenseDataStore), and interactive toolbar.
Dashboard Widget‑based dashboard engine (DashboardEngine) with 8+ widget types, 24‑column responsive grid, edit mode (DashboardBuilder), and JSON persistence. Includes FastSenseGrid for tiled FastSense layouts.
SensorThreshold Tag‑based sensor data containers (SensorTag, StateTag), derived signals (MonitorTag, CompositeTag, DerivedTag), thresholding, TagRegistry catalog, and live/batch ingestion pipelines.
EventDetection Event detection from threshold violations, EventStore with SQLite cluster support, EventViewer (Gantt timeline), live pipeline, email notifications, and snapshot generation.
WebBridge TCP server + NDJSON protocol relay that exposes FastPlot data and actions to external web/API clients.

Quick Start

install;          % add paths, compile MEX if needed

% ---- Basic plot with a sensor tag ----
st = SensorTag('pressure', ...
               'X', linspace(0, 100, 1e7), ...
               'Y', sin(linspace(0, 100, 1e7)) + 0.1*randn(1,1e7));
fp = FastSense('Theme', 'dark');
fp.addTag(st, 'DisplayName', 'Pressure');
fp.addThreshold(0.8, 'Direction', 'upper', 'ShowViolations', true, 'Label', 'Hi');
fp.render();
% ---- Tiled dashboard with FastSenseGrid ----
fig = FastSenseGrid(2, 2, 'Theme', 'dark');
fig.setTileSpan(1, [1 2]);          % top tile spans 2 cols

fp1 = fig.tile(1);
fp1.addLine(linspace(0,10,1e5), sin(linspace(0,10,1e5)), 'DisplayName', 'Signal');
fig.setTileTitle(1, 'Pressure Monitor');

fp2 = fig.tile(2);
fp2.addLine(linspace(0,10,1e5), cos(linspace(0,10,1e5)), 'DisplayName', 'Signal');
fig.setTileTitle(2, 'Temperature');

fig.renderAll();
% ---- Derived monitor tag with state‑dependent threshold ----
sensor = SensorTag('chamber_p', 'X', 0:0.01:100, 'Y', randn(1,10001)*10 + 50);
state  = StateTag('machine_state', 'X', [0 30 60 80], 'Y', [0 1 2 1]);
mon    = MonitorTag('hi_alarm', sensor, @(x,y) y > 70, 'MinDuration', 0.5);
sensor.addListener(mon);   % keeps monitor updated when sensor data changes

fp = FastSense('Theme', 'industrial');
fp.addTag(sensor, 'DisplayName', 'Pressure');
fp.addTag(mon, 'DisplayName', 'Alarm');   % 0/1 binary series
fp.render();

Requirements

  • MATLAB R2020b or later, or GNU Octave 7+
  • A C compiler (optional — enables MEX acceleration; pure‑MATLAB fallback always available)
  • No additional toolboxes are required

Getting Started

Start with the Installation guide to set up FastPlot and compile MEX for your platform. Then follow the Getting Started tutorial for step‑by‑step examples covering core plotting, dashboards, sensor tags, and live mode.

API Reference

Core Classes

Specialized Guides

Clone this wiki locally