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 | Three numeric variables where the third is roughly ordinal |
|---|---|
| Size scaling | Radius ∝ √value, so the AREA is proportional to the value |
| Radius range | 4 px to 26 px, mapped from zero to the largest absolute value |
| Third column | Optional — leave it unset and the chart degrades gracefully to a scatter plot |
| Negative sizes | Scaled by absolute value; a negative magnitude has no visual meaning |
| Output | PNG at 2× scale, plus CSV, JSON and Markdown of all three columns |
When it misleads you
- Bubble size is the least accurate encoding in common use. Readers can compare positions well, lengths reasonably and areas poorly — expect the third variable to be read as "small, medium, large" and nothing finer.
- Large bubbles overlap and hide smaller ones behind them. Sorting the rows so the largest are drawn first helps a little; a scatter plot with the third variable as colour often helps more.
- Because area grows as the square of radius, a chart that scales the radius directly makes big values look enormously bigger. This page scales by the square root to avoid that — but many tools and many published charts do not, so be careful comparing this one to others.
- Three variables in one picture is close to the limit of what a reader will decode. A fourth, carried by colour, usually pushes the chart past the point where anyone bothers.
How it is calculated
Three columns are read: X and Y set the position of each bubble exactly as in a scatter plot, and the third column sets the size. Rows missing either coordinate are dropped; a row missing only the size is drawn at the default radius.
Sizes are mapped so that the AREA of the bubble is proportional to the value, which means the radius is proportional to the square root. This matters more than it sounds: if the radius were mapped directly, a value twice as large would draw a bubble four times the area and look four times as important. That is one of the most common quiet distortions in published charts.
The radius runs from 4 px to 26 px. A floor of 4 px keeps the smallest bubbles visible; a ceiling of 26 px stops one dominant value from swallowing the whole plot.
If you leave the size column unset, every bubble is drawn at a fixed radius and the chart becomes an ordinary scatter plot. That is deliberate: the tool should still work when your third variable turns out to be missing.
Questions and answers
Why are my bubbles smaller than I expected?
Because the area, not the radius, is proportional to your values. A value four times larger produces a bubble twice as wide, not four times. That is the correct encoding — tools that make it four times wide are exaggerating by a factor of four.
Can I use a text column for the size?
No. The size column must be numeric. If you want to encode a category, a scatter plot with coloured groups communicates it far more accurately than bubble size.
My big bubbles cover the small ones.
Sort your rows in descending order of the size column before pasting, so the largest are drawn first and the small ones land on top. If overlap is still severe, the data probably wants a scatter plot instead.
What happens with negative sizes?
They are scaled by absolute value, because a bubble cannot have negative area. If negatives are meaningful in your data, encode them with position or colour rather than size.
Is anything sent to a server?
No. All three columns are read, scaled and drawn inside your browser.