Create charts from data

Turn selected CSV columns into grouped bars or categorical lines, with a data table and local SVG and PNG downloads.

CSV up to 128 KiB, one header row and 1–200 data rows. Choose one label column and 1–4 series, up to 800 points. Numbers are ASCII decimals only between −10¹² and 10¹², with at most 6 decimal places and 32 UTF-16 units per numeric cell, including the sign and leading zeros; no exponents, grouping, whitespace or empty numeric cells. Excess precision is rejected. Headers and labels accept up to 80 UTF-16 units without line breaks or control characters. Input is never silently truncated.

The horizontal axis is categorical in source-row order from left to right, including Arabic; no time scale or inferred units. Compare series with the same unit. Bar axes include zero. Line axes span the values; constant values receive a bounded nonzero range, and a single point remains visible. Charts sample at most 10 axis labels, shortening each to 12 graphemes; titles and series names use up to 24 graphemes followed by … when shortened. The full table is unchanged. This applies to both SVG and PNG. Device fonts can render differently; no human review of Arabic shaping is claimed.

Image size is 640–1600 × 480–1200 pixels; PNG up to 8 MiB and SVG up to 512 KiB. Worker deadline: 5 seconds; PNG encoding: 15 seconds. After encoding cancellation, the slot remains occupied until the original callback finishes; retry if busy is reported. Local processing without uploads or automatic storage. The table shows 20 rows per page; files contain all points.

How to use

Paste CSV or choose a UTF-8 file, select its delimiter and read the columns. Select the label and value columns; series follow selection order. Choose grouped bars or lines, title and dimensions, then create the chart. Review the original data table and preview. Download SVG, or create PNG and then download it. The copy button copies the complete SVG only after your explicit action.

Try an example

CSV: item,value followed by A,-10 and B,10. The bar chart spans −10 to 10 with a zero baseline: A extends below zero and B above it. Equal labels are not aggregated; they remain separate categories in source-row order.

Support & limits

Horizontal order is left to right, including Arabic, and categorical rather than temporal. No sorting, aggregation or inferred units; compare series with the same unit. Bar axes include zero. Lines use the data range or a bounded range around a constant value within ±10¹², with a circle for a single point. BigInt preserves six decimal places; rendered coordinates are approximate browser-scale ratios, while the table retains original text such as 001.25. Axes show up to 10 sampled labels shortened to 12 graphemes; titles and series names use up to 24 graphemes, with … when shortened. Every point is exported. The table shows 20 rows per page. SVG text is escaped, not HTML or links. Device fonts can differ; no human review of Arabic shaping or identical pixels across fonts and browsers is claimed.

Common questions

Are data uploaded or source files changed?

Processing stays in the browser without uploads or automatic storage, and original files remain unchanged. UTF-8 only: one leading CSV BOM is file framing; an additional U+FEFF remains text. The shared parser normalizes record separators while preserving cell line breaks. Preview and downloads share geometry, but are not a screenshot of the source. Cancellation terminates the worker. A native PNG encoding callback cannot be interrupted, so its result is discarded and its session remains occupied until cleanup finishes.

Related tools