Distributions, mid-sentence
Hover any spark — the bin or value line under the cursor
highlights (bins brighten, lines thicken) and shows a tooltip. Pure SVG —
no JavaScript, no image files.
Show code
import pavement.svg as psvg
# A spark is an SVG string — drop it anywhere in HTML.
spark = psvg.spark(values, bins=8, color="#c0392b")
# bins=None draws a rug (one line per distinct value):
rug = psvg.spark(values, bins=None)
# Customize height, colors, hover formatting:
psvg.spark(prices, bins=8, height="3em", value_format=lambda v: f"${v:,.0f}")
Request latency kept a heavy tail pavement sparkline of 400 values 0.00933 to 4.57
p0 to p12
12% (49 of 400 values) 4.57 to 10
p12 to p25
12% (50 of 400 values) 10 to 16.9
p25 to p38
12% (50 of 400 values) 16.9 to 25.4
p38 to p50
12% (50 of 400 values) 25.4 to 34.6
p50 to p62
12% (50 of 400 values) 34.6 to 56
p62 to p75
12% (50 of 400 values) 56 to 83
p75 to p88
12% (50 of 400 values) 83 to 199
p88 to p100
12% (49 of 400 values) 0.00933
p0
<1% (1 of 400 values) 4.57
p12
0% (0 of 400 values) 10
p25
0% (0 of 400 values) 16.9
p38
0% (0 of 400 values) 25.4
p50
0% (0 of 400 values) 34.6
p62
0% (0 of 400 values) 56
p75
0% (0 of 400 values) 83
p88
0% (0 of 400 values) 199
p100
<1% (1 of 400 values) while CPU stayed mid-range and
symmetric pavement sparkline of 400 values 0 to 25.1
p0 to p12
12% (49 of 400 values) 25.1 to 31.4
p12 to p25
12% (50 of 400 values) 31.4 to 35.9
p25 to p38
12% (50 of 400 values) 35.9 to 38.3
p38 to p50
12% (50 of 400 values) 38.3 to 41.9
p50 to p62
12% (50 of 400 values) 41.9 to 45.8
p62 to p75
12% (50 of 400 values) 45.8 to 51.3
p75 to p88
12% (50 of 400 values) 51.3 to 71.5
p88 to p100
12% (49 of 400 values) 0
p0
<1% (1 of 400 values) 25.1
p12
0% (0 of 400 values) 31.4
p25
0% (0 of 400 values) 35.9
p38
0% (0 of 400 values) 38.3
p50
0% (0 of 400 values) 41.9
p62
0% (0 of 400 values) 45.8
p75
0% (0 of 400 values) 51.3
p88
0% (0 of 400 values) 71.5
p100
<1% (1 of 400 values) ; exam scores pavement sparkline of 300 values 43.3 to 58
p0 to p10
10% (29 of 300 values) 58 to 63.5
p10 to p20
10% (30 of 300 values) 63.5 to 66.1
p20 to p30
10% (30 of 300 values) 66.1 to 69
p30 to p40
10% (30 of 300 values) 69 to 72.1
p40 to p50
10% (30 of 300 values) 72.1 to 74.4
p50 to p60
10% (30 of 300 values) 74.4 to 77.8
p60 to p70
10% (30 of 300 values) 77.8 to 80.9
p70 to p80
10% (30 of 300 values) 80.9 to 85.4
p80 to p90
10% (30 of 300 values) 85.4 to 100
p90 to p100
9% (28 of 300 values) 43.3
p0
<1% (1 of 300 values) 58
p10
0% (0 of 300 values) 63.5
p20
0% (0 of 300 values) 66.1
p30
0% (0 of 300 values) 69
p40
0% (0 of 300 values) 72.1
p50
0% (0 of 300 values) 74.4
p60
0% (0 of 300 values) 77.8
p70
0% (0 of 300 values) 80.9
p80
0% (0 of 300 values) 85.4
p90
0% (0 of 300 values) 100
p100
1% (2 of 300 values) clustered above the pass mark. Commute
times split into two crowds pavement sparkline of 360 values 7.9 to 8.74
p0 to p12
12% (44 of 360 values) 8.74 to 9.03
p12 to p25
12% (45 of 360 values) 9.03 to 9.27
p25 to p38
12% (45 of 360 values) 9.27 to 12.9
p38 to p50
12% (45 of 360 values) 12.9 to 17.5
p50 to p62
12% (45 of 360 values) 17.5 to 18.1
p62 to p75
12% (45 of 360 values) 18.1 to 18.7
p75 to p88
12% (45 of 360 values) 18.7 to 20
p88 to p100
12% (44 of 360 values) 7.9
p0
<1% (1 of 360 values) 8.74
p12
0% (0 of 360 values) 9.03
p25
0% (0 of 360 values) 9.27
p38
0% (0 of 360 values) 12.9
p50
0% (0 of 360 values) 17.5
p62
0% (0 of 360 values) 18.1
p75
0% (0 of 360 values) 18.7
p88
0% (0 of 360 values) 20
p100
<1% (1 of 360 values) . A pile-up raises a tassel: survey
satisfaction bunched on one answer pavement sparkline of 250 values 1 to 2
0% (0 of 250 values) 2 to 3
0% (0 of 250 values) 3 to 4
0% (0 of 250 values) 4 to 5
0% (0 of 250 values) 5 to 5
0% (0 of 250 values) 1
p0
14% (36 of 250 values) 2
p20
10% (24 of 250 values) 3
p40
19% (48 of 250 values) 4
p60
33% (82 of 250 values) 5
p80 to p100
24% (60 of 250 values) , and the error budget sat at
zero most days pavement sparkline of 300 values 0 to 0
0% (0 of 300 values) 0 to 0
0% (0 of 300 values) 0 to 0.214
p33 to p50
3% (10 of 300 values) 0.214 to 1.35
p50 to p67
17% (50 of 300 values) 1.35 to 3.03
p67 to p83
17% (50 of 300 values) 3.03 to 15.7
p83 to p100
16% (49 of 300 values) 0
p0 to p33
47% (140 of 300 values) 0.214
p50
0% (0 of 300 values) 1.35
p67
0% (0 of 300 values) 3.03
p83
0% (0 of 300 values) 15.7
p100
<1% (1 of 300 values) . With bins=None a spark becomes a rug
500 values, -4.29 to 2.67 pavement sparkline of 500 values , versus the binned summary of the same data pavement sparkline of 500 values -4.29 to -1.04
p0 to p17
16% (82 of 500 values) -1.04 to -0.44
p17 to p33
16% (82 of 500 values) -0.44 to 0.0591
p33 to p50
17% (83 of 500 values) 0.0591 to 0.475
p50 to p67
17% (83 of 500 values) 0.475 to 0.938
p67 to p83
16% (82 of 500 values) 0.938 to 2.67
p83 to p100
16% (82 of 500 values) -4.29
p0
<1% (1 of 500 values) -1.04
p17
<1% (1 of 500 values) -0.44
p33
<1% (1 of 500 values) 0.0591
p50
0% (0 of 500 values) 0.475
p67
<1% (1 of 500 values) 0.938
p83
<1% (1 of 500 values) 2.67
p100
<1% (1 of 500 values) .
A rug adapts its hover to its size. A handful of build times pavement sparkline of 12 values 3.1 to 3.4
0% (0 of 12 values) 3.4 to 3.8
0% (0 of 12 values) 3.8 to 4
0% (0 of 12 values) 4 to 4.2
0% (0 of 12 values) 4.2 to 4.5
0% (0 of 12 values) 4.5 to 5.1
0% (0 of 12 values) 5.1 to 5.9
0% (0 of 12 values) 5.9 to 6.2
0% (0 of 12 values) 6.2 to 7
0% (0 of 12 values) 7 to 9.5
0% (0 of 12 values) 9.5 to 12
0% (0 of 12 values) 3.1
p0
8% (1 of 12 values) 3.4
p9
8% (1 of 12 values) 3.8
p18
8% (1 of 12 values) 4
p27
8% (1 of 12 values) 4.2
p36
8% (1 of 12 values) 4.5
p45
8% (1 of 12 values) 5.1
p55
8% (1 of 12 values) 5.9
p64
8% (1 of 12 values) 6.2
p73
8% (1 of 12 values) 7
p82
8% (1 of 12 values) 9.5
p91
8% (1 of 12 values) 12
p100
8% (1 of 12 values) is a
small rug — hover any value to read it and its percentile. The
500-point rug above 500 values, -4.29 to 2.67 pavement sparkline of 500 values is too dense for that, so it shows one whole-spark
summary instead; force per-value hover with tick_hover_limit=None,
or turn it off with 0.
On a dark panel the sparks inherit the light text color
through currentColor: scores pavement sparkline of 300 values 43.3 to 58
p0 to p10
10% (29 of 300 values) 58 to 63.5
p10 to p20
10% (30 of 300 values) 63.5 to 66.1
p20 to p30
10% (30 of 300 values) 66.1 to 69
p30 to p40
10% (30 of 300 values) 69 to 72.1
p40 to p50
10% (30 of 300 values) 72.1 to 74.4
p50 to p60
10% (30 of 300 values) 74.4 to 77.8
p60 to p70
10% (30 of 300 values) 77.8 to 80.9
p70 to p80
10% (30 of 300 values) 80.9 to 85.4
p80 to p90
10% (30 of 300 values) 85.4 to 100
p90 to p100
9% (28 of 300 values) 43.3
p0
<1% (1 of 300 values) 58
p10
0% (0 of 300 values) 63.5
p20
0% (0 of 300 values) 66.1
p30
0% (0 of 300 values) 69
p40
0% (0 of 300 values) 72.1
p50
0% (0 of 300 values) 74.4
p60
0% (0 of 300 values) 77.8
p70
0% (0 of 300 values) 80.9
p80
0% (0 of 300 values) 85.4
p90
0% (0 of 300 values) 100
p100
1% (2 of 300 values) , latency pavement sparkline of 400 values 0.00933 to 4.57
p0 to p12
12% (49 of 400 values) 4.57 to 10
p12 to p25
12% (50 of 400 values) 10 to 16.9
p25 to p38
12% (50 of 400 values) 16.9 to 25.4
p38 to p50
12% (50 of 400 values) 25.4 to 34.6
p50 to p62
12% (50 of 400 values) 34.6 to 56
p62 to p75
12% (50 of 400 values) 56 to 83
p75 to p88
12% (50 of 400 values) 83 to 199
p88 to p100
12% (49 of 400 values) 0.00933
p0
<1% (1 of 400 values) 4.57
p12
0% (0 of 400 values) 10
p25
0% (0 of 400 values) 16.9
p38
0% (0 of 400 values) 25.4
p50
0% (0 of 400 values) 34.6
p62
0% (0 of 400 values) 56
p75
0% (0 of 400 values) 83
p88
0% (0 of 400 values) 199
p100
<1% (1 of 400 values) , rug
500 values, -4.29 to 2.67 pavement sparkline of 500 values .
endpoint p50 p99 distribution
/search 28 210 pavement sparkline of 400 values 0.00933 to 4.57
p0 to p12
12% (49 of 400 values) 4.57 to 10
p12 to p25
12% (50 of 400 values) 10 to 16.9
p25 to p38
12% (50 of 400 values) 16.9 to 25.4
p38 to p50
12% (50 of 400 values) 25.4 to 34.6
p50 to p62
12% (50 of 400 values) 34.6 to 56
p62 to p75
12% (50 of 400 values) 56 to 83
p75 to p88
12% (50 of 400 values) 83 to 199
p88 to p100
12% (49 of 400 values) 0.00933
p0
<1% (1 of 400 values) 4.57
p12
0% (0 of 400 values) 10
p25
0% (0 of 400 values) 16.9
p38
0% (0 of 400 values) 25.4
p50
0% (0 of 400 values) 34.6
p62
0% (0 of 400 values) 56
p75
0% (0 of 400 values) 83
p88
0% (0 of 400 values) 199
p100
<1% (1 of 400 values)
/checkout 41 156 pavement sparkline of 400 values 0 to 25.1
p0 to p12
12% (49 of 400 values) 25.1 to 31.4
p12 to p25
12% (50 of 400 values) 31.4 to 35.9
p25 to p38
12% (50 of 400 values) 35.9 to 38.3
p38 to p50
12% (50 of 400 values) 38.3 to 41.9
p50 to p62
12% (50 of 400 values) 41.9 to 45.8
p62 to p75
12% (50 of 400 values) 45.8 to 51.3
p75 to p88
12% (50 of 400 values) 51.3 to 71.5
p88 to p100
12% (49 of 400 values) 0
p0
<1% (1 of 400 values) 25.1
p12
0% (0 of 400 values) 31.4
p25
0% (0 of 400 values) 35.9
p38
0% (0 of 400 values) 38.3
p50
0% (0 of 400 values) 41.9
p62
0% (0 of 400 values) 45.8
p75
0% (0 of 400 values) 51.3
p88
0% (0 of 400 values) 71.5
p100
<1% (1 of 400 values)
/upload 63 540 pavement sparkline of 360 values 7.9 to 8.74
p0 to p12
12% (44 of 360 values) 8.74 to 9.03
p12 to p25
12% (45 of 360 values) 9.03 to 9.27
p25 to p38
12% (45 of 360 values) 9.27 to 12.9
p38 to p50
12% (45 of 360 values) 12.9 to 17.5
p50 to p62
12% (45 of 360 values) 17.5 to 18.1
p62 to p75
12% (45 of 360 values) 18.1 to 18.7
p75 to p88
12% (45 of 360 values) 18.7 to 20
p88 to p100
12% (44 of 360 values) 7.9
p0
<1% (1 of 360 values) 8.74
p12
0% (0 of 360 values) 9.03
p25
0% (0 of 360 values) 9.27
p38
0% (0 of 360 values) 12.9
p50
0% (0 of 360 values) 17.5
p62
0% (0 of 360 values) 18.1
p75
0% (0 of 360 values) 18.7
p88
0% (0 of 360 values) 20
p100
<1% (1 of 360 values)