Python Tutorial
Plotly Pie Charts
px.pie maps a numeric column to slice size and a category to labels.
px.pie
hole=0.4 makes a donut.
import plotly.express as px
df = px.data.tips()
fig = px.pie(df, values="tip", names="day", hole=0.4)
fig.show()📘 Real-World Deep Dive
Knowing <strong>Plotly Pie (Plotly)</strong> well is what turns Plotly from a curiosity into a daily tool — you'll reach for it in nearly every real project.
Real-Life Scenario
An end-to-end usage of Plotly Pie that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
import plotly.express as px
df = px.data.tips().groupby("sex")["tip"].sum().reset_index()
fig = px.pie(df, names="sex", values="tip")
fig.show()Expected Output
(no output)Common mistakes
- Plotly Express (
px) is concise but auto-layouts aggressively — switch to Graph Objects (go) for full control. - Passing a list with mixed types to
px.linetriggers silent upcasting; convert first to typed arrays. - Plotly expects millisecond timestamps for time axes (
df["date"].astype("datetime64[ms]")). - Treating Plotly Pie as a black box without reading the docs — the API has subtle defaults that bite when you scale.
🚀 Performance & Best Practices
- For large plots use
Scattergl(WebGL) instead ofScatter. - In Dash apps, send data with
dcc.Store+json.dumpsrather than re-passing Python objects. - Disable
uirevisionwhen you want Plotly to fully redraw instead of preserving state. - When working with Plotly, prefer vectorised / batched operations over Python loops.
🧪 Try It Yourself
- Reproduce the snippet on a representative slice of your own data.
- Profile the snippet with
cProfileortimeitand find the single biggest improvement. - Generalise the snippet into a small, reusable function you can drop into future projects.