Skip to content

Gallery

Every screenshot on this page is captured from a self-contained, runnable script in examples/ — each exposes a build() (returns the widget) and a main() (shows a window):

uv run python examples/01_hello.py

Showcase

Larger scenarios that combine several features around a realistic dataset.

Sensor telemetry

A rolling baseline, a 3σ tolerance Spread, flagged-anomaly Scatter, and an X-linked residual panel derived with an Expression26_telemetry_monitoring.py

Telemetry monitoring dashboard

Market analytics

Price Curve + 20/50-day moving averages + a Bollinger Spread, over an X-linked volume Bars panel — 27_market_analytics.py

Market analytics dashboard

Streaming telemetry

A live rolling feed (qv.stream), its 400k-point history datashaded, and a brush-driven detail panel wired through a Signal34_streaming_telemetry.py

Streaming telemetry with datashaded history

The everyday figures

Step curve, stacked Area, horizontal Bars, Pie donut, Ecdf, filled Contour, SI ticks, a dual-axis pair, Quiver with a reference key, a boundary-level Mesh, Stem, and an annotated Heatmap — one grid, under the native toolbar — 35_everyday_figures.py

The everyday figures in one grid

Linked dashboard

Three panels, shared X, brushing, dark theme — under sixty lines — dashboard_native.py

Three-panel linked dashboard

Big-data density map

2M categorized events datashaded into a categorical density map; hover reports the count under the cursor — 28_event_density_map.py

Categorical event density map

Gridded science

An xarray 2-D field as an Image map plus a 1-D cross-section Curve, and a 3-D cube overlaying 250 instance lines with a mean envelope — 29_climate_field.py · 30_xarray_sensor_lines.py

Climate field map and cross-section

250 overlaid instance lines with a mean envelope

Mosaic layout

Layout.mosaic("AAB\nCCB", …) — spanning panes from an ASCII plan, track ratios, and a figure suptitle — 36_mosaic_layout.py

Mosaic layout with spanning panes and a suptitle

Named panes — the mosaic's list form names every subplot ("price", "volume", "depth"), link_x="col" keeps a column time-aligned, and the same names address the live render: view.pane("price").set_range(x=…) zooms programmatically (the linked pane follows), pane.export(...) writes one pane, view.on(..., pane="price") scopes events — 37_named_panes.py

Named panes: labeled mosaic, linked column, programmatic pane zoom

Inset axes — overview * qv.Inset(zoom, rect=…, label="zoom", indicate=True): a child surface floating on its parent with the zoom window marked on the parent; the labeled inset is a pane (view.pane("zoom").set_range(…), pane-scoped events, per-pane export, state that survives backend switches) — 38_inset_zoom.py

Inset axes: a zoom window floating on its parent, with the region marked

Polar plots ([D119]) — polar as a transform: qv.polar(element) reinterprets x/y as (θ, r), qv.PolarGrid draws the circular chrome (degree or custom spoke labels — the radar case), qv.wedge() builds polar bars; the surface stays rectilinear, so pan/zoom/state/backends all keep working — 39_polar.py

Polar: spiral via qv.polar, wedge bars, radar with custom labels

Getting started

  • Hello-world scatter

    The smallest program — a scatter in a View, six lines.

    01_hello.py

  • Overlay beside a histogram panel

    Composition — overlay with *, lay out with +.

    02_composition.py

  • Backend switching demo

    Switch engines at runtime — the same plot via pyqtgraph or matplotlib.

    03_backends.py

  • Curves from a custom palette on the dark theme

    Themes & palettes — light/dark, colors, a registered custom palette.

    04_theming.py

Core concepts

Big data — Datashader

Reactive & adapters

WebEngine

The same elements rendered as interactive Plotly in a QWebEngineView, plus RawFigure passthrough for existing Plotly / Bokeh / HoloViews figures. These need the webengine extra and a real display.


The full index with per-example notes and required extras lives in examples/README.md; regenerate every screenshot with uv run python tools/capture_screenshots.py.