How to read and build a scatter plot: spotting correlation, handling outliers and overplotting, adding trend lines, and using bubble size as a third variable.
By DataVisuals TeamUpdated 6 min read
Best for
Checking whether two numeric measures are related, such as ad spend and sales, or followers and engagement rate.
Avoid when
One of your variables is a category (use bars), or the x-axis is time (use a line).
Data you need
Two numeric columns with one row per item, ideally at least 20 rows. A label column helps for naming outliers.
A scatter plot places one dot per item, with one measure on the x-axis and another on the y-axis. Each dot might be a store, a country, a tweet or a customer. The cloud of dots answers one question: when one number goes up, what does the other do?
It's the chart for relationships. You can see at a glance whether the dots rise together, fall together, or ignore each other, and you can spot the points that refuse to follow the crowd. Those exceptions are often more useful than the trend.
When to use a scatter plot
Use a scatter plot when you have two numeric measures for the same set of things and you want to know how they relate. Typical examples:
Ad spend and revenue for each store
Height and weight of players on a team
Number of followers and engagement rate for a set of social accounts
Average temperature and ice cream sales by day
It needs enough rows to form a pattern. Five dots don't make a relationship; twenty or more start to. If one of your measures is a category ("region", "plan type"), you want a bar chart or a strip plot instead. If the x-axis is time, connect the dots and you have a line chart.
Reading the pattern
Three things are worth looking at, in this order:
Direction. Dots rising from left to right mean a positive relationship; falling means negative.
Strength. A tight band means the two measures are closely linked. A loose cloud means the link is weak, even if the direction is clear.
Shape. Not every relationship is a straight line. Revenue may climb with ad spend and then flatten out as extra spending stops working. A curve like that is easy to see in a scatter plot and easy to miss in a summary number.
The correlation coefficient (r) puts direction and strength into a single number between -1 and 1. It's handy, but it only measures straight-line relationships, and very different scatter plots can share the same r. Always look at the dots before quoting the number.
Correlation is not causation
A scatter plot of ice cream sales against drowning incidents by month shows a clear positive pattern. Ice cream doesn't cause drowning; hot weather drives both. That hidden third factor is called a confounder, and it is the most common reason a strong-looking pattern misleads.
Causation can also run the other way. Stores with more staff sell more, but busy stores may have hired more staff because they were already selling well. When you present a scatter plot, describe what it shows ("stores that spend more on ads tend to sell more") rather than what you suspect ("ads drive sales"), unless you have a test that backs the stronger claim.
Outliers and trend lines
A trend line (usually a least-squares fit) summarizes the overall direction and gives the eye a reference. Points far from the line become easy to spot, and those are often the interesting ones.
Fig. 1 Ad spend against sales for 35 stores. The dashed trend line shows the general pattern, and one store sits far above it, which is worth a question before it is worth a conclusion.
When you find an outlier, check it before you do anything else. It might be a data entry error (an extra zero), a special case (a store next to a stadium on game weeks), or the most important finding in the dataset. Don't delete outliers quietly to make the trend look cleaner. If you exclude one, say so in a note.
Keep the trend line visually lighter than the dots, a thin dashed line works well, and don't extend it far beyond the range of your data. A line fitted to stores spending $2k to $20k says nothing reliable about a store spending $80k.
Fixing overplotting
With hundreds or thousands of points, dots pile on top of each other and the densest areas turn into a solid blob. You can no longer tell whether a region holds 50 points or 500, and small clusters disappear completely.
Fig. 2 The same 990 points. Large solid dots merge into one shape. Smaller, transparent dots show where the data is dense and reveal a small separate cluster.
Try these in order:
Make the dots smaller.
Make them semi-transparent, so overlapping areas get darker.
Remove the dot outline, which adds clutter at high density.
For tens of thousands of points, switch to a binned view: a hexbin or a 2D heatmap that counts points per cell.
If the data has whole-number values (survey scores, star ratings), many points land on exactly the same spot. A tiny amount of random offset, called jitter, spreads them out so the reader can see how many there are.
Bubble size as a third variable
You can encode a third measure as dot size, which turns the scatter plot into a bubble chart. It works for a rough sense of "big or small", not for precise comparison.
Fig. 3 Twelve accounts by followers and engagement rate, with bubble area showing posts per month. The size key lets readers judge roughly; the coral account stands out by position, not by size.
Two rules keep bubbles honest. Scale the area to the value, not the radius, because doubling the radius quadruples the area and exaggerates big values. And include a size key, since nobody can guess what a bubble of a given size means. People underestimate differences in area, so if the third variable is the main point, give it its own chart. Color can carry a category (such as region) instead, but keep it to a few distinct values.
Rule of thumb: if the reader needs to compare bubble sizes precisely, that variable belongs on an axis, not in the dot size.
Axes, labels and log scales
Label both axes with the measure and its unit ("Ad spend ($k)"). Neither axis needs to start at zero; let the range fit the data.
When values span several orders of magnitude, such as accounts with 500 followers and accounts with 5 million, a linear axis squeezes most dots into one corner. A log scale spreads them out evenly. Mark the ticks with real values (1k, 10k, 100k) so readers don't have to do the math.
Label a few points by name, the outliers and the ones your text discusses, not all of them. A scatter plot with every dot labeled turns into a word cloud. The tweet performance guide shows this approach on real post data.
Common mistakes
Mistake
Why it hurts
Fix
Claiming cause from a pattern
Confounders and reverse causation
Describe the association; test the cause
Deleting outliers silently
Hides errors and findings alike
Investigate, then note any exclusion
Big solid dots on dense data
Overplotting hides density
Smaller, transparent dots, or bins
Bubble radius scaled to value
Big values look far too big
Scale area, add a size key
Trend line far past the data
Implies knowledge you don't have
Fit and draw within the data range
Every point labeled
Clutter
Label outliers and named examples only
The best scatter plots answer a question the reader already has, like "do bigger accounts get less engagement?", and then point at the dot that breaks the rule.
Questions
Does a strong pattern in a scatter plot prove causation?
No. It shows that two measures move together in this data. A third factor, reverse causation or plain coincidence can all produce the same picture, so you need an experiment or domain knowledge to claim cause.
Which variable goes on the x-axis?
Put the one you control or that comes first on the x-axis, and the outcome on the y-axis. Ad spend goes on x and sales on y, because the question is how sales respond to spend.
How many points are too many for a scatter plot?
There is no fixed number, but once dots start covering each other (often a few hundred at normal size), switch to smaller, semi-transparent dots, or to a binned heatmap for many thousands.