When you want to know whether two things move together — does more ad spend bring more revenue, do longer sessions mean more purchases, does price relate to rating — the scatter plot is the tool. Each observation becomes a single point placed by its two values, and the shape of the resulting cloud tells you the story: rising together, falling apart, clustered, or scattered with no pattern at all.
Relationship questions are everywhere in analytics, and the scatter plot answers them using the two most accurate visual channels, horizontal and vertical position. That is why it beats color-coded tables or bubble charts for seeing correlation.
Reading the cloud of points
A scatter plot puts one variable on the x-axis, another on the y-axis, and draws a point per row. From the pattern you read several things at once:
- Direction — points rising left to right mean positive correlation; falling means negative; no tilt means little linear relationship.
- Strength — a tight band signals a strong relationship; a diffuse cloud signals a weak one.
- Form — the pattern may be a straight line, a curve, or none.
- Clusters — separate blobs suggest distinct groups in the data.
- Outliers — points far from the rest that may be errors or genuinely unusual observations.
import matplotlib.pyplot as plt
# Illustrative sample: ad spend vs revenue for 12 campaigns (₹ '000)
ad_spend = [10, 12, 15, 18, 20, 22, 25, 28, 30, 35, 40, 45]
revenue = [55, 62, 70, 78, 88, 92, 101, 118, 120, 145, 158, 150]
fig, ax = plt.subplots(figsize=(7, 4))
ax.scatter(ad_spend, revenue, color="#2f6fdb", s=60, alpha=0.8)
ax.set_xlabel("Ad spend (₹ '000)")
ax.set_ylabel("Revenue (₹ '000)")
ax.set_title("Revenue rises with ad spend, but with scatter",
loc="left", fontweight="bold")
for spine in ["top", "right"]:
ax.spines[spine].set_visible(False)
plt.tight_layout()
plt.show()
What this renders: twelve points climbing from lower left (spend 10,
revenue 55) to upper right (spend 45, revenue ~150). The upward slope
shows a clear positive relationship, but the points do not sit on a
perfect line — the spread means the link is real yet imperfect. The
last point (spend 45, revenue 150) sits slightly below the trend,
hinting at diminishing returns worth investigating.
Adding a trend line
A fitted line summarizes the direction and strength of a linear relationship and guides the reader's eye. Seaborn's regplot draws the scatter and a regression line together in one call.
import seaborn as sns
import matplotlib.pyplot as plt
ad_spend = [10, 12, 15, 18, 20, 22, 25, 28, 30, 35, 40, 45]
revenue = [55, 62, 70, 78, 88, 92, 101, 118, 120, 145, 158, 150]
fig, ax = plt.subplots(figsize=(7, 4))
sns.regplot(x=ad_spend, y=revenue, ax=ax,
scatter_kws={"color": "#2f6fdb", "s": 60},
line_kws={"color": "#d1495b"})
ax.set_xlabel("Ad spend (₹ '000)")
ax.set_ylabel("Revenue (₹ '000)")
plt.tight_layout()
plt.show()
What this renders: the same twelve points with a red straight line
sloping upward through them and a light shaded band showing the
confidence interval around the fit. The line makes the positive trend
explicit and the band communicates uncertainty in the estimate.
Add a trend line only when the relationship looks roughly linear, and never let it hide a curve, clusters or outliers that the raw points show.
Correlation is not causation
The most important discipline with scatter plots is interpretive. A strong upward pattern tells you two variables are associated; it does not tell you one causes the other. A lurking third variable may drive both — ice-cream sales and drowning both rise in summer without either causing the other. Treat a strong scatter pattern as a lead to test, not a conclusion. This is one of the most common traps highlighted in misleading charts.
Handling overplotting
With thousands of points, the cloud turns into a solid blob and you lose all sense of density. Standard fixes: lower the marker opacity with alpha so overlapping points darken, shrink the marker size, sample the data, or switch to a hexbin or 2D density plot that bins points into colored cells — a close relative of the heatmap.
Practical usage
Analysts use scatter plots to validate hypotheses before deeper analysis: does the relationship a stakeholder assumes actually appear in the data? They also encode a third dimension by color or size — coloring points by segment often reveals that a single weak overall trend is really two strong trends in different groups. And a scatter of predicted versus actual values is a standard way to sanity-check a model.
Common mistakes
- Claiming causation. A pattern shows correlation, not cause. State it as association and investigate further.
- Ignoring overplotting. A dense blob hides structure; use transparency, sampling or hexbins.
- Forcing a line on a curve. A straight trend line on a curved relationship misleads. Look at the raw points first.
- Missing hidden groups. An overall flat cloud can contain two opposing trends; color by segment to check.
- Letting outliers drive the fit. A single extreme point can swing a regression line. Inspect outliers before trusting the trend.
In interviews
You may be asked "how would you check whether two metrics are related" or be shown a scatter and asked to interpret it. Strong answers describe reading direction, strength and form, checking for clusters and outliers, and — crucially — noting that correlation does not imply causation and naming a possible confounder. Mentioning overplotting fixes for large data shows you have handled real datasets, not just textbook ones.
Where this fits in your learning path
The scatter plot is the relationship tool in the choosing the right chart framework, complementing the distribution tools like the histogram. For relationships across many variable pairs at once, it scales up to the heatmap as a correlation matrix. Reading relationships is a core analytical skill on the data analyst roadmap and across the data analytics hub.
Frequently Asked Questions
What does a scatter plot show?
What is the difference between a scatter plot and a line chart?
Does a scatter plot prove causation?
What is overplotting and how do I fix it?
Should I add a trend line to a scatter plot?
Want to Build Your Career in Data Analytics with AI?
Join CodeBegun and train with working industry engineers — View the Data Analytics curriculum

