Skip to content

Introduction to Plotly Express

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 is really two APIs layered on top of each other:

  • plotly.express (px) — 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_objects (go) — the low-level building blocks (go.Scatter, go.Bar, …) that px itself is built from. Reach for it when you need fine control px 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.

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.bar(...), px.scatter(...) etc. all return this same kind of figure object — which is why they share methods like .show(), .update_layout(), and .write_html().

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 day/orders values — no extra code required.

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 PNG
fig.write_image("orders.png")  # requires the `kaleido` package

PNG/SVG export needs the extra kaleido dependency installed (pip 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.

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

pch.coffeeTagline

pch.coffeeCta

pch.feedbackHeading

pch.feedbackSubheading