📊 Developer Tools Free Forever

Data Visualization Tool: Create Charts from CSV, JSON & Excel Online

Import CSV, JSON, NDJSON, TXT or Excel files, or paste data straight from a spreadsheet, and turn it into charts and tables instantly. Build multi-axis charts, switch chart types, and export as PNG or JPG, all in your browser.

Drop a data file here or click to browse
.csv, .tsv, .txt, .json, .ndjson, .xlsx, .xls · nothing is uploaded to any server
About This Tool

How this data visualization tool reads six file formats and builds charts from them

Turning a spreadsheet into a chart usually means opening Excel or wiring up a charting library by hand. This tool collapses that into one flow: drop a file or paste your data, let it detect column types automatically, and build any of ten Chart.js chart types from the fields it found. It reads CSV, TSV, plain delimited text, JSON, NDJSON, and Excel workbooks (.xlsx, .xls, .xlsm), which is a wider format range than most single purpose CSV chart tools support.

The tool leans on three well known open source libraries loaded from a CDN: PapaParse for delimited text parsing, SheetJS for Excel workbook reading, and Chart.js for rendering. It checks whether these are already present on the page and only fetches whichever ones are missing, so it doesn't duplicate script loads on pages that already include them. Once loaded, everything runs client side; your file's data is parsed and charted in the browser and never uploaded anywhere.

Automatic column type detection

Before you can pick sensible chart axes, the tool needs to know which columns hold numbers, which hold dates, and which hold plain text. It samples up to 400 rows spread across the whole file and classifies each column by majority vote.

Step 1 Sample the column Up to 400 rows, spread evenly through the file, are inspected per column, keeping detection fast even on files with hundreds of thousands of rows.
Step 2 Count numeric and date matches Each non-empty value is checked against real date patterns such as 2025-03-01, 01/03/2025 or Mar 2025, then as a number. Numbers like 1,234.5, 9,4, 12% and $40 are understood.
Step 3 Apply the 70 percent threshold If more than 70 percent of sampled values parse as numbers, the whole column is typed number; same threshold for date. Anything below both thresholds falls back to text.
Step 4 Drive the sample charts Detected types decide which auto-suggested charts appear: a bar chart pairs the first number column against the first text or date column, a line chart needs a date and number column together, and a pie chart summarizes the distribution of the first text column.
// simplified from detectType() in the tool source function detectType(values) { var nums = 0, dates = 0, total = 0; values.forEach(function(v) { if (v === "" || v == null) return; total++; if (isDateLike(v)) dates++; else if (!isNaN(toNum(v))) nums++; }); if (nums / total > 0.7) return "number"; if (dates / total > 0.7) return "date"; return "text"; }

Aggregation modes in the chart builder

When multiple rows share the same X-axis value, the builder groups them and reduces the Y values down to one number per group using whichever aggregation mode you pick.

ModeCalculation
SumAdds every value in the group
AverageSum divided by count of values in the group
CountNumber of rows in the group, ignoring the actual values
Min / MaxMath.min or Math.max across the group
NoneNo grouping; every row plots as its own point (used for scatter and bubble charts)
Data loads as soon as you pick it. Excel workbooks go through FileReader.readAsArrayBuffer and XLSX.read() with real date cells, and clicking another sheet tab loads that sheet. CSV, TSV, JSON and NDJSON load straight away too. Change the delimiter, header or cell range and click Reload Data to apply it.
Ten chart types

Bar, horizontal bar, line, area, pie, doughnut, radar, polar area, scatter and bubble, all rendered through the same Chart.js instance, swapped by destroying and recreating the chart object when you change type.

Dual Y-axes

Each series in the builder can be assigned to the left or right axis independently, useful when charting two metrics with very different scales, like revenue in dollars against a conversion percentage.

PNG and JPG export

Export reads the canvas directly via toDataURL. JPG export first draws a white background onto a temporary canvas, since JPEG has no transparency channel and would otherwise render a black background.

PapaParse for CSV/TSV SheetJS for Excel Chart.js rendering

Charting libraries worth knowing

Charts people build with this

Turning a raw analytics export into a shareable bar chart without opening a spreadsheet program, quickly checking whether an API's NDJSON log stream has an obvious trend over time, visualizing a client supplied Excel workbook without reformatting it first, building a scatter plot to eyeball correlation between two numeric columns before running formal statistics, and generating a PNG chart image to drop straight into a slide deck or report.

Common Questions

FAQ: Data Visualization Tool

No. Files are parsed and charted entirely in your browser using PapaParse, SheetJS, and Chart.js, all loaded once from a CDN. Your data never leaves your device, which makes this tool suitable for internal or sensitive datasets.

It supports CSV, TSV, plain TXT with a delimiter, JSON, NDJSON (newline-delimited JSON), and Excel files (.xlsx, .xls, .xlsm). Each format has its own import options so you can control exactly how the data is read.

Yes. In the chart builder, each Y series has its own axis dropdown, so you can put one series on the left axis and another on the right axis. This is useful when comparing two fields with very different scales, like revenue and conversion rate.

After loading, the tool samples the values in each column and checks whether they parse as numbers or dates. If a column is mostly numeric it's treated as a number field, if it matches common date patterns it's treated as a date, otherwise it's treated as text. You can still use any column as an X or Y field regardless of its detected type.

When you have repeated X values, for example the same month appearing on multiple rows, aggregation groups those rows together and combines the Y values using sum, average, count, min, or max. Set it to None to plot every row individually instead.

Yes. After uploading an Excel file, sheet tabs appear so you can pick which sheet to load, and an optional range field lets you limit the import to a specific cell range like A1:F50 instead of the whole sheet.

You can export any chart as a PNG (transparent background, sharper edges) or a JPG (white background, smaller file size) directly from the chart builder, using the canvas the chart is drawn on.

Files up to 100 MB load in your browser's memory, with no upload. To keep charts readable and fast, a chart without aggregation plots the first 5,000 rows and an aggregated chart shows up to 200 groups. Pick Sum or Average to summarise every row of a large file.