RunLocalTools

CSV & XML to Chart — Free Online Chart Maker (No Upload)

Turn a CSV, TSV, or XML file into a bar, line, pie, doughnut, scatter, or radar chart in your browser. Auto-detected columns, row aggregation, two-file comparison, and PNG/SVG export — nothing is uploaded.

What it does

Paste or drop a CSV, TSV, or simple XML file and get an instant, editable chart — bar, stacked bar, line, pie, doughnut, scatter, or radar. The tool auto-detects your delimiter and which columns are numbers versus text, picks sensible defaults for the X and Y axes, and lets you group rows, sort, filter to a Top N, switch palettes, and overlay a second dataset for comparison. Export the result as a PNG, an SVG, or copy it straight to your clipboard. Everything happens in your browser — your data is never uploaded anywhere.

How it works

The parser reads your file client-side: for CSV/TSV it handles quoted fields, embedded commas and newlines, and auto-detects the delimiter (comma, tab, semicolon, or pipe). For XML, it looks for the most-repeated sibling element in your document — the “record” pattern — and turns each one into a row, using either child elements or attributes as columns, so both <row><name>…</name></row> and <item name="…" value="…"/> style exports work without configuration.

Once you pick an X column and one or more Y columns, you can turn on row grouping to aggregate duplicate categories (sum, average, count, min, or max) — handy when your CSV is raw transaction-level data rather than pre-summarized. The chart itself is drawn as plain SVG rather than rendered to a <canvas> first, so the SVG export is pixel-exact vector output, and the PNG export is a clean rasterization of that same SVG rather than a screenshot.

How to use it

  1. Drop a CSV, TSV, or XML file, or paste it directly into the text box.
  2. Confirm whether the first row is a header.
  3. Pick your X-axis (category) column and one or more Y-axis (value) columns — numeric columns are pre-selected for you.
  4. Choose a chart type, and turn on row grouping if your data has repeated categories you want summed or averaged.
  5. Optionally add a second file to overlay as a dashed comparison series, pick a color palette, sort or limit to a Top N, and give the chart a title.
  6. Download as PNG or SVG, or copy the image straight to your clipboard.

Supported formats

  • CSV / TSV — comma, tab, semicolon, or pipe-delimited, with quoted-field support for embedded commas, quotes, and line breaks.
  • XML — element-based records (<rows><row>…</row></rows>) or attribute-based records (<item attr="…"/>), auto-detected from the shape of the document.

If your data started life as a spreadsheet or database export rather than a raw CSV, the spreadsheet viewer can open .xlsx/.xls/.ods files and export a clean CSV first, and query results copied straight from a SQL client can go through the SQL → Markdown table generator or be pasted here directly — the delimiter detection handles either.

FAQ

Does this upload my file anywhere? No — parsing and chart rendering both happen entirely in your browser. Nothing in your CSV, TSV, or XML file is ever sent to a server.

Can I chart a spreadsheet (.xlsx) file directly? Not directly — this tool reads plain-text CSV/TSV/XML. Export your spreadsheet to CSV first, or use the spreadsheet viewer to open it and copy the data out as CSV.

What’s the difference between “aggregate” on and off? Off, each row becomes its own bar or point — useful when your X column is already unique per row (an ID, a date). On, rows sharing the same X value are grouped and combined with sum/average/count/min/max — useful for raw data like one row per transaction that you want summarized by category.

Can I compare two datasets on the same chart? Yes — turn on “Compare a second file/paste” and add a second CSV/XML source. It’s overlaid as a dashed series (for line charts) or an additional series (for bar charts) using the same X/Y column selections.

Why does my XML file produce an empty chart? The tool looks for at least two sibling elements with the same tag name to treat as rows. If your XML has a different shape (e.g. deeply nested, or only one record), it falls back to treating the whole document as a single row — check that your export uses a repeating element per record.

Is there a limit to how much data I can chart? There’s no hard limit, but very large files (tens of thousands of rows) will parse and render more slowly since everything runs on your device rather than a server. Using row aggregation and a Top N filter keeps large datasets readable either way.