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
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
| Parameter | Value | Notes |
|---|---|---|
| Delimiters | , · ; · TAB | auto-detected |
| Header | auto-detected | generic names otherwise |
| Row cap | 200 000 | keeps rendering responsive |
| Invalid cells | break the trace | no fake interpolation |
| X axis | first column or row index |
Python equivalent
# 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.