What is a bubble chart?
A bubble chart is a scatter plot where marker size carries a third variable, so a single point communicates three numbers at once:
- x axis = metric 1
- y axis = metric 2
- bubble size = metric 3 (volume/magnitude)
Add color and you're encoding a fourth variable too — which is exactly what px.scatter(..., size=...) gives you; a bubble chart isn't a separate chart type in Plotly, it's a scatter plot with the size argument filled in.
Example
import pandas as pd
import plotly.express as px
df = pd.DataFrame({
"city": ["Pune", "Delhi", "Mumbai", "Bengaluru"],
"sales": [120, 180, 90, 160],
"profit": [30, 45, 10, 35],
"orders": [200, 350, 120, 280],
})
fig = px.scatter(
df,
x="sales",
y="profit",
size="orders",
color="city",
hover_name="city",
title="Sales vs Profit (bubble size = orders)",
)
fig.show()Plotly scales bubble area (not raw radius) to the size column by default, which is the perceptually correct choice — doubling a value should roughly double the visual area, not the diameter.
Tips
- Keep sizes reasonable; very large bubbles hide others — cap the biggest bubble at a sensible max area.
- Use hover tooltips (
hover_name) to reduce label clutter instead of printing every city name on the chart. - Watch out for overlap: when bubbles are close together, consider adding
opacityso overlapping regions stay readable.
flowchart LR A["px.scatter(x, y)"] --> B["+ size=column
marker area encodes metric 3"] B --> C["+ color=column
hue encodes metric 4 (category)"] C --> D["Bubble chart:
4 variables, 1 point per row"]
Check your understanding
What does bubble size encode in px.scatter(..., size="orders")?
Marker size carries a third variable, so one point shows sales, profit and orders together.
Show answer
B — The orders column, a third variable — Marker size carries a third variable, so one point shows sales, profit and orders together.
Is a bubble chart a separate chart type in Plotly Express?
A bubble chart is a scatter plot with size set, and adding color encodes a fourth variable.
Show answer
C — No, it is px.scatter with the size argument — A bubble chart is a scatter plot with size set, and adding color encodes a fourth variable.
Plotly scales bubble area to the size column. Why is that sensible?
Scaling area, not raw radius, is the perceptually correct choice.
Show answer
B — Doubling a value roughly doubles the visual area — Scaling area, not raw radius, is the perceptually correct choice.
Bubbles overlap heavily in a chart. Which tip from the lesson helps?
Opacity keeps overlapping regions readable. Capping the largest bubble size also helps.
Show answer
A — Add opacity — Opacity keeps overlapping regions readable. Capping the largest bubble size also helps.
Next
Continue to: Sunburst Charts for visualizing hierarchical data.
🧪 Try It Yourself
Exercise 1 – Turn a Scatter into a Bubble Chart
Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.
Press Run to see what your code prints.Exercise 2 – Reduce Label Clutter with hover_name
Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.
Press Run to see what your code prints.Exercise 3 – Add a Fourth Variable with Color
Tab indents. Press Escape, then Tab, to leave the editor. Control plus Enter runs the code; Control plus Shift plus Enter submits it.
Press Run to see what your code prints.