TestBench.tools

CSV Waveform Plotter

Plot waveform columns from CSV files, fully client-side.

Drop a .csv file here

or

Your file never leaves your browser.

This tool turns a CSV of logged samples into a quick-look waveform chart: drop the file, tick the channels, and the traces render on a scope-style canvas with auto-scaled axes. Delimiter and header row are detected automatically, the first column can serve as the time axis, and everything happens locally — handy for eyeballing a data logger export without opening a spreadsheet.

How it works

The parser sniffs the delimiter from the first line (comma, semicolon or tab), decides whether that line is a header, and reads every following row into per-column numeric arrays. The renderer then computes the min/max envelope of the visible channels, maps samples onto the canvas with a light grid, and draws each channel as a colored polyline — breaking the line at invalid cells rather than interpolating through them. Channel visibility toggles re-render instantly.

Worked example

time,ch1,ch2
0,0.0,5.0
0.001,0.31,4.9 … (1000 rows)
→ 2 traces over t = 0…1 s, auto-scaled, ch2 toggleable

Parameters

ParameterValueNotes
Delimiters, · ; · TABauto-detected
Headerauto-detectedgeneric names otherwise
Row cap200 000keeps rendering responsive
Invalid cellsbreak the traceno fake interpolation
X axisfirst column or row index

Python equivalent

Python
# The same quick look with pandas + matplotlib
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("capture.csv", sep=None, engine="python")
df.plot(x=df.columns[0])     # first column as X axis
plt.show()

FAQ

Which CSV layouts are understood?

Comma, semicolon or tab delimited files, with or without a header row — both are auto-detected. If the first row contains anything non-numeric it becomes the channel names; otherwise columns get generic names. Non-numeric rows inside the data are skipped and counted.

What does 'first column = X axis' do?

When enabled, column 1 (typically time) provides the horizontal coordinates and the remaining columns plot against it. Disabled, every column plots against its row index — useful when the file has no time base.

How large a file can it plot?

Parsing caps at 200 000 rows to keep the canvas responsive; larger files plot their first 200 000 rows. For multi-million-sample datasets, decimate the CSV first or use a desktop plotting tool.

Why do gaps appear in a trace?

Empty or non-numeric cells become NaN and break the polyline instead of drawing a misleading interpolated segment — the same convention scope software uses for invalid samples.

Is my file uploaded?

No. Parsing and drawing run entirely in your browser on a canvas element.

Related tools