One hover formatter, every backend

Every interactive pavement shows its binned values on hover. Pass value_format — a function from a value to its display string — and the same one-argument callable formats the hover on every backend. Here it is lambda v: f"${v:,.0f}" throughout, so 1200.0 reads as $1,200 everywhere. Hover the boxes (and the ticks) to see it.

Plotly

import pavement.plotly as ppl

ppl.plot(revenue, labels=stores, orientation="horizontal",
         value_label="daily revenue",
         value_format=lambda v: f"${v:,.0f}")

Bokeh

import pavement.bokeh as pbk

pbk.plot(revenue, labels=stores, orientation="horizontal",
         value_label="daily revenue",
         value_format=lambda v: f"${v:,.0f}")

HoloViews (bokeh backend)

import holoviews as hv
import pavement.holoviews as phv

hv.extension("bokeh")
phv.plot(revenue, labels=stores, orientation="horizontal",
         value_label="daily revenue",
         value_format=lambda v: f"${v:,.0f}")

HoloViews (plotly backend)

import holoviews as hv
import pavement.holoviews as phv

hv.extension("plotly")        # only this line changes
phv.plot(revenue, labels=stores, orientation="horizontal",
         value_label="daily revenue",
         value_format=lambda v: f"${v:,.0f}")

The same pavement, rendered through HoloViews' plotly backend instead of bokeh — hover still reads the formatted dollars.

Inline SVG (pavement.svg)

import pavement.svg as psvg

psvg.spark(revenue, color="#2c7fb8",
           value_format=lambda v: f"${v:,.0f}")

Each spark is a bare <svg> string — no JavaScript. Hover a bin to read its dollar range.

kioskpavement sparkline of 10 values$320 to $455 p0 to p25 10% (1 of 10 values)$455 to $850 p25 to p50 20% (2 of 10 values)$850 to $1,320 p50 to p75 20% (2 of 10 values)$1,320 to $2,400 p75 to p100 10% (1 of 10 values)$320 p0 10% (1 of 10 values)$455 p25 10% (1 of 10 values)$850 p50 0% (0 of 10 values)$1,320 p75 10% (1 of 10 values)$2,400 p100 10% (1 of 10 values)
outletpavement sparkline of 10 values$880 to $1,140 p0 to p25 10% (1 of 10 values)$1,140 to $1,580 p25 to p50 20% (2 of 10 values)$1,580 to $2,310 p50 to p75 20% (2 of 10 values)$2,310 to $3,600 p75 to p100 10% (1 of 10 values)$880 p0 10% (1 of 10 values)$1,140 p25 10% (1 of 10 values)$1,580 p50 0% (0 of 10 values)$2,310 p75 10% (1 of 10 values)$3,600 p100 10% (1 of 10 values)
flagshippavement sparkline of 10 values$1,500 to $2,250 p0 to p25 10% (1 of 10 values)$2,250 to $3,450 p25 to p50 20% (2 of 10 values)$3,450 to $5,200 p50 to p75 20% (2 of 10 values)$5,200 to $8,200 p75 to p100 10% (1 of 10 values)$1,500 p0 10% (1 of 10 values)$2,250 p25 10% (1 of 10 values)$3,450 p50 0% (0 of 10 values)$5,200 p75 10% (1 of 10 values)$8,200 p100 10% (1 of 10 values)