Loading a File
Footer + opens Load data.
- Formats: CSV / TSV / TXT, Excel
.xlsx, Parquet. - CSV/Excel: layout wizard (header row, optional units row, first data row), then channel select.
- Parquet: skip layout; channel select only.
- Paste: Manual entry / paste. First row = headers. Cap 30×10. No drag-and-drop.
- With data loaded: Add channels from this file (same file only).
Chart Types
Settings → Chart Types:
- Line/Scatter — line and scatter plots.
- Time-Series — large time-series datasets.
Chart sidebar Line / Scatter sets the plot style for the active pane.
- Line: default. Optional Display Points; line-width slider.
- Scatter: point size/opacity. Requires Line/Scatter in Settings.
- Grouping locks the plot to line.
View Types
Footer icons switch Chart, Table, and Map. All three share the global row window.
- Chart: plot + channel sidebar.
- Table: all columns in the current window. Plotted channels can highlight.
- Map: lat/lng polyline. Pick channels in the map panel;
lat/lngnames auto-detect. - Map can be hidden in Settings. Invalid coords are dropped (red bands on the slider).
Using Views
Chart sidebar wrench (next to Active Series) opens View Tools. Save/load a .txt JSON view.
- Stores X/Y/Y2 channels, grouping, and multi-pane layout.
- Load from View Tools, or during import (channel select).
- Names missing from the current file are skipped.
Snapshots
Footer camera. Chart view only, with X and at least one Y applied.
- Captures window, channels, chart settings, grouping, and panes. Thumbnail stored locally.
- Click a thumbnail in the footer strip to recall.
- Recall first saves the working view. Close the banner to restore it.
Calculations
Chart sidebar → Calculations. Each formula is a new channel. Source columns are not overwritten.
- DuckDB expression, one extra column, same rows.
- Name: letter/underscore, then letters, digits, underscores. Optional unit.
- Validate shows sample values. Charts plot numbers only.
- Buttons: Math, Text, Time, Logic, Window. Quote names with spaces:
"Air Temp".
Math
Temp * 1.8 + 32
CASE WHEN Temp > 100 THEN Temp ELSE 0 END
Elapsed time
Exports that switch from 59.990 to 1:00.010 are not numeric. Add a seconds channel and plot that as X:
elapsed_seconds(Time)
59.990 = seconds. 1:00.010 = m:ss. 1:00:00.010 = h:mm:ss. Do not cast these to TIME/TIMESTAMP (1:00.010 becomes 1 hour).
CASE
WHEN Time LIKE '%:%:%' THEN
try_cast(split_part(Time, ':', 1) AS DOUBLE) * 3600
+ try_cast(split_part(Time, ':', 2) AS DOUBLE) * 60
+ try_cast(split_part(Time, ':', 3) AS DOUBLE)
WHEN Time LIKE '%:%' THEN
try_cast(split_part(Time, ':', 1) AS DOUBLE) * 60
+ try_cast(split_part(Time, ':', 2) AS DOUBLE)
ELSE try_cast(Time AS DOUBLE)
END
Casts and text
try_cast(Time AS DOUBLE)
Time::DOUBLE
col + INTERVAL 1 HOUR
split_part(Name, '_', 1)
Window functions
One value per row. Requires OVER (...). The OVER button inserts OVER (ORDER BY _oid).
val - lag(val) OVER (ORDER BY _oid)
sum(val) OVER (ORDER BY _oid)
sum(val) without OVER is blocked (would collapse rows).
Limits
- No new tables. No
SELECT/FROM/WHERE/JOIN. - No comments or multiple statements.
- Cannot replace a source column — add a new name and plot it.
Grouping
Chart sidebar → Group/Factor. Splits one Y metric into a line per factor level.
- Needs Line/Scatter and a line plot. Enabling switches to that.
- Factor column must be categorical (not a numeric measurement).
- Levels come from the full file, not the zoom window (up to 500 listed).
- Y2 is cleared. Global slider hides while a grouped slice is active.
- Disable from the same modal. Channel changes still need Apply.