Skip to content

Introduction to Plotly Express

Why Plotly?

Matplotlib and Seaborn draw static pictures — great for reports and papers, but a reader can’t poke at them. Plotly draws figures that respond to the mouse:

  • Hover tooltips (see the exact value under the cursor)
  • Zoom and pan (drag to inspect a busy region)
  • Legend toggling (click a series name to hide/show it)

This makes Plotly great for:

  • Exploratory analysis (you dig into the data yourself)
  • Sharing insights in a browser (no extra software needed)
  • Lightweight dashboards (a handful of linked charts on one page)

Plotly Express vs Graph Objects

Plotly is really two APIs layered on top of each other:

  • plotly.expressplotly.express (pxpx) — a high-level, “one function per chart type” API. You hand it a tidy DataFrame and column names; it builds the whole figure. Start here for almost everything.
  • plotly.graph_objectsplotly.graph_objects (gogo) — the low-level building blocks (go.Scattergo.Scatter, go.Bargo.Bar, …) that pxpx itself is built from. Reach for it when you need fine control pxpx doesn’t expose, or when combining traces manually (see subplots/dashboards later in this phase).

This phase focuses on Plotly Express, because it covers the vast majority of everyday charts with the least code.

Anatomy of a figure

Every Plotly chart is a figure: a Python object holding

  • data — one or more traces (a line, a set of bars, a scatter layer…)
  • layout — title, axis labels, legend position, margins
  • config — export/interaction options (zoom mode, static vs interactive)

px.line(...)px.line(...), px.bar(...)px.bar(...), px.scatter(...)px.scatter(...) etc. all return this same kind of figure object — which is why they share methods like .show().show(), .update_layout().update_layout(), and .write_html().write_html().

First interactive chart

Plotly Express line chart
import pandas as pd
import plotly.express as px
 
df = pd.DataFrame({
    "day": [1, 2, 3, 4, 5],
    "orders": [120, 140, 130, 160, 155],
})
 
fig = px.line(df, x="day", y="orders", title="Orders over time")
fig.show()
Plotly Express line chart
import pandas as pd
import plotly.express as px
 
df = pd.DataFrame({
    "day": [1, 2, 3, 4, 5],
    "orders": [120, 140, 130, 160, 155],
})
 
fig = px.line(df, x="day", y="orders", title="Orders over time")
fig.show()

Hover over any point in the rendered chart and Plotly shows you the exact dayday/ordersorders values — no extra code required.

Saving/exporting

You can export a figure two very different ways:

  • HTML — best for interactive sharing (keeps hover, zoom, legend toggling)
  • PNG/JPEG/SVG — static image, good for slides or a printed report
Save to HTML
fig.write_html("orders.html")
Save to HTML
fig.write_html("orders.html")
Save to PNG
fig.write_image("orders.png")  # requires the `kaleido` package
Save to PNG
fig.write_image("orders.png")  # requires the `kaleido` package

PNG/SVG export needs the extra kaleidokaleido dependency installed (pip install -U kaleidopip install -U kaleido); HTML export needs nothing beyond Plotly itself.

diagram Plotly Express workflow mermaid
How a DataFrame becomes an interactive figure you can show or export.

Next

Continue to: Interactive Line Charts to build trend charts with markers and multiple series.

🧪 Try It Yourself

Exercise 1 – Build Your First Figure

Exercise 2 – Choose the Right API

Exercise 3 – Export for Sharing

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did