Your data
Paste a table straight from Excel or Google Sheets, or drop a CSV file. Nothing is uploaded anywhere — the whole calculation runs inside this browser tab.
CSV, TSV or plain text. Files saved in windows-1251 are detected and re-read automatically, so Cyrillic headers do not turn into garbage.
Parsing options
Columns
Result
Save and share
The drawing library is downloaded only when you press the button, and only on this page.
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Best for | Two to five quantities measured on the same timeline |
|---|---|
| Series limit | Every numeric column is drawn; readability collapses past 5 |
| Shared axis | All series share one vertical axis, so their units must match |
| Colour palette | Eight colours, ordered so that neighbours stay distinguishable for red-green colour blindness |
| Legend | Always shown — a line is never identified by colour alone |
| Output | PNG at 2× scale, plus CSV, JSON and Markdown of all series |
When it misleads you
- All lines share one vertical axis. Plotting revenue in millions next to conversion rate in percent flattens the small series into a straight line at the bottom — the chart is technically correct and completely useless.
- Beyond four or five lines the chart becomes spaghetti. The honest fix is small multiples: several tiny charts side by side, one series each.
- Crossing lines suggest a relationship that may not exist. Two series can cross simply because they are measured in different units that happen to have similar magnitudes.
- A reader compares the vertical gap between lines, but the eye measures the perpendicular distance, not the vertical one. On steep sections the gap looks smaller than it is.
How it is calculated
The first column you designate as labels becomes the shared horizontal axis. Every remaining column that parses as numeric becomes a separate line, in the order the columns appear in your table.
Each series gets the next colour from a fixed palette that was checked with a colour-vision simulator: the worst adjacent pair still separates clearly under protanopia. Because two of the colours do not reach a 3:1 contrast ratio against white on their own, the legend is always drawn — the identity of a line never rests on colour alone.
Missing cells break the line rather than dropping it to zero, so a gap in one series does not silently distort the comparison with the others.
When a series has more than forty points the individual markers are hidden and only the line remains. Forty circles overlapping each other carry no information and make the picture noisier, not richer.
Questions and answers
How do I choose which columns become lines?
Every numeric column except the one you picked as labels is drawn. To leave a column out, delete it from the pasted table — that is faster than any checkbox interface and it keeps the tool honest about what it is plotting.
My second series is invisible at the bottom of the chart.
That is the shared-axis problem: the two series differ by orders of magnitude. Either split them into two charts, or convert both to an index where the first period equals 100 so they become comparable.
Can I change the colours?
Not on this page. The palette is fixed because it has been validated for colour-vision deficiency, and letting arbitrary colours in would quietly break that guarantee. Export the data as CSV if you need full control in another tool.
Does it handle thousands of rows?
Yes. Drawing stays smooth into the tens of thousands of points, though a chart with that many points is usually better shown as a moving average.
Is anything uploaded?
No. There is no server behind this page at all — parsing, drawing and export all run in your browser.