Vancouver Canucks
Pacific · 3-15-1, 7 pts
2026-27 · regular season
How to read this map
One rink, both ends: what VAN generates on the left, what it concedes on the right (on a phone, one end at a time, net at the top: the switch above the map picks it). Every attempt is a Gaussian bump of height = its model xG, summed per game. The controls switch the surface (xG heatmap ↔ vs league, the league baseline at the same strength) and the markers: × goal · • on net · ◦ missed · small • blocked.
The page opens at 5v5; empty-net attempts are excluded throughout, and the strength buckets segregate them anyway — which is why the empty-net control greys out unless the view can actually contain one. Everything inside the outlined box moves with the filters; everything below it does not.
Observed production
5v5 · season to datePercentiles and the gray spread rank against all 32 teams recomputed under the current filter — every bar and band here moves together, so a slice never ranks against a different slice's league.
Rolling xGF%
5v5 · last 10 gamesSkaters on ice
5v5 · season to date| Skater | Pos | TOI | xGF/60 | xGA/60 | xGF% | for / against |
|---|---|---|---|---|---|---|
| Jake DeBrusk | F | 283 | 3.29 | 2.47 | 57.1% | |
| Marco Rossi | F | 264 | 2.88 | 2.50 | 53.6% | |
| Jonathan Lekkerimaki | F | 287 | 2.87 | 2.60 | 52.5% | |
| Linus Karlsson | F | 273 | 2.50 | 2.37 | 51.3% | |
| Elias Pettersson | F | 385 | 2.62 | 2.89 | 47.5% | |
| Tom Willander | D | 326 | 2.50 | 2.84 | 46.8% | |
| Brock Boeser | F | 356 | 2.61 | 3.13 | 45.5% | |
| Liam Ohgren | F | 258 | 2.30 | 2.88 | 44.3% | |
| Zeev Buium | D | 401 | 2.23 | 2.99 | 42.7% | |
| Paul Cotter | F | 253 | 2.33 | 3.23 | 41.9% | |
| Brendan Gallagher | F | 171 | 2.19 | 3.40 | 39.2% | |
| Filip Hronek | D | 494 | 2.24 | 3.61 | 38.3% | |
| Max Sasson | F | 241 | 2.24 | 3.82 | 37.0% | |
| Arshdeep Bains | F | 152 | 2.05 | 3.50 | 37.0% | |
| Drew O'Connor | F | 298 | 2.15 | 4.05 | 34.7% | |
| Filip Chytil | F | 139 | 2.17 | 4.15 | 34.4% | |
| Jamie Oleksiak | D | 298 | 1.89 | 3.70 | 33.8% | |
| Elias Pettersson | D | 358 | 1.80 | 3.81 | 32.0% | |
| Luke Schenn | D | 142 | 1.85 | 4.01 | 31.6% | |
| Victor Mancini | D | 99 | 1.68 | 4.45 | 27.4% | |
| Guillaume Brisebois | D | 75 | 1.31 | 4.01 | 24.6% | |
| Aatu Räty | F | 41 | 1.21 | 4.15 | 22.6% | |
| Jacob Quillan | F | 35 | 1.35 | 1.95 | 40.9% |
| Skater | Pos | TOI | xGF/60 | xGA/60 | xGF% | for / against |
|---|---|---|---|---|---|---|
| Max Sasson | F | 207 | 2.27 | 2.53 | 47.2% | |
| Tom Willander | D | 294 | 2.18 | 2.75 | 44.2% | |
| Jamie Oleksiak | D | 264 | 2.07 | 2.72 | 43.2% | |
| Jake DeBrusk | F | 211 | 2.30 | 3.09 | 42.6% | |
| Drew O'Connor | F | 243 | 2.36 | 3.25 | 42.1% | |
| Arshdeep Bains | F | 143 | 2.12 | 2.94 | 41.9% | |
| Elias Pettersson | D | 301 | 1.90 | 2.65 | 41.7% | |
| Brendan Gallagher | F | 166 | 2.20 | 3.09 | 41.7% | |
| Elias Pettersson | F | 254 | 2.05 | 2.92 | 41.3% | |
| Linus Karlsson | F | 230 | 1.60 | 2.44 | 39.7% | |
| Jonathan Lekkerimaki | F | 226 | 2.01 | 3.15 | 39.0% | |
| Marco Rossi | F | 209 | 1.81 | 2.86 | 38.7% | |
| Luke Schenn | D | 126 | 2.02 | 3.28 | 38.1% | |
| Liam Ohgren | F | 218 | 1.66 | 2.79 | 37.4% | |
| Zeev Buium | D | 346 | 1.76 | 3.17 | 35.7% | |
| Filip Hronek | D | 347 | 1.68 | 3.08 | 35.4% | |
| Brock Boeser | F | 251 | 1.70 | 3.27 | 34.2% | |
| Victor Mancini | D | 88 | 1.90 | 3.74 | 33.7% | |
| Paul Cotter | F | 213 | 1.47 | 3.08 | 32.2% | |
| Guillaume Brisebois | D | 66 | 1.49 | 3.85 | 27.9% | |
| Filip Chytil | F | 101 | 1.22 | 3.82 | 24.1% | |
| Aatu Räty | F | 38 | 1.27 | 3.18 | 28.5% | |
| Jacob Quillan | F | 34 | 1.39 | 1.59 | 46.5% |
| Skater | Pos | TOI | xGF/60 | xGA/60 | xGF% | for / against |
|---|---|---|---|---|---|---|
| Liam Ohgren | F | 23 | 8.29 | 0.80 | 91.2% | |
| Paul Cotter | F | 22 | 10.04 | 1.02 | 90.8% | |
| Jonathan Lekkerimaki | F | 47 | 6.04 | 0.64 | 90.4% | |
| Jake DeBrusk | F | 52 | 6.63 | 0.72 | 90.2% | |
| Brock Boeser | F | 61 | 5.96 | 0.70 | 89.5% | |
| Filip Hronek | D | 58 | 6.05 | 0.74 | 89.1% | |
| Elias Pettersson | F | 61 | 5.82 | 0.73 | 88.9% | |
| Linus Karlsson | F | 30 | 8.99 | 1.31 | 87.3% | |
| Marco Rossi | F | 42 | 7.52 | 1.23 | 85.9% | |
| Tom Willander | D | 14 | 6.33 | 1.07 | 85.5% | |
| Zeev Buium | D | 32 | 6.95 | 1.21 | 85.1% | |
| Filip Chytil | F | 9 | 8.25 | 2.05 | 80.1% | |
| Drew O'Connor | F | 8 | 2.60 | 0.67 | 79.4% | |
| Max Sasson | F | 1 | 0.00 | 0.00 | — | |
| Elias Pettersson | D | 1 | 0.00 | 0.00 | — | |
| Guillaume Brisebois | D | 1 | 0.00 | 1.69 | 0.0% | |
| Aatu Räty | F | 1 | 0.11 | 0.00 | 100.0% | |
| Arshdeep Bains | F | 1 | 0.15 | 0.00 | 100.0% | |
| Brendan Gallagher | F | 0 | 0.00 | 0.00 | — | |
| Luke Schenn | D | 0 | 0.00 | 0.00 | — | |
| Jamie Oleksiak | D | 0 | 98.72 | 0.00 | 100.0% |
| Skater | Pos | TOI | xGF/60 | xGA/60 | xGF% | for / against |
|---|---|---|---|---|---|---|
| Drew O'Connor | F | 38 | 0.90 | 10.18 | 8.1% | |
| Elias Pettersson | D | 48 | 0.91 | 11.25 | 7.5% | |
| Max Sasson | F | 26 | 1.03 | 13.82 | 6.9% | |
| Luke Schenn | D | 16 | 0.53 | 9.98 | 5.0% | |
| Filip Hronek | D | 58 | 0.48 | 10.44 | 4.4% | |
| Elias Pettersson | F | 43 | 0.15 | 7.03 | 2.1% | |
| Jamie Oleksiak | D | 30 | 0.19 | 11.91 | 1.6% | |
| Brock Boeser | F | 22 | 0.15 | 10.61 | 1.4% | |
| Filip Chytil | F | 11 | 0.15 | 11.91 | 1.2% | |
| Victor Mancini | D | 11 | 0.00 | 10.18 | 0.0% | |
| Liam Ohgren | F | 9 | 0.05 | 10.12 | 0.5% | |
| Paul Cotter | F | 9 | 0.95 | 11.47 | 7.7% | |
| Arshdeep Bains | F | 8 | 1.02 | 13.83 | 6.9% | |
| Tom Willander | D | 7 | 0.58 | 11.41 | 4.8% | |
| Guillaume Brisebois | D | 6 | 0.00 | 6.79 | 0.0% | |
| Linus Karlsson | F | 4 | 0.00 | 11.61 | 0.0% | |
| Brendan Gallagher | F | 4 | 0.79 | 17.49 | 4.3% | |
| Aatu Räty | F | 1 | 0.00 | 36.02 | 0.0% | |
| Jacob Quillan | F | 1 | 0.00 | 14.67 | 0.0% | |
| Marco Rossi | F | 1 | 0.00 | 10.96 | 0.0% | |
| Jake DeBrusk | F | 1 | 0.00 | 2.48 | 0.0% | |
| Zeev Buium | D | 1 | 1.88 | 12.27 | 13.3% |
How to read this section
Each skater is placed by the team's expected goals for (across) and against (up, reversed so fewer is higher) per 60 minutes while they are on the ice. Above the dashed line the team out-chances its opponents with that skater on; below it, it is out-chanced. The dotted lines are the league skater average, and the open ring is the VAN average. Bigger markers mean more ice time; circles are forwards, diamonds defensemen.
5v5 is even strength with both goalies in. All is every strength, with shots at an empty net left out, as on the rink above. Power play is more skaters than the opponent with VAN's goalie in (an extra attacker for a pulled goalie is not one); penalty kill is fewer, with the opponent's goalie in. The strength switch is the page's: it moves the rink above too, and the link carries it. On-ice numbers describe what happened with a skater on the ice, teammates and opponents included; the Players page's RAPM separates the skater from both.
Skaters under 66 minutes at 5v5 for VAN are left off the chart and folded under the table; the floor grows with games played. On the power play and the kill a skater also needs half a minute a game at that strength, so the dots there are the units, not whoever got a shift. A traded skater counts only their time with this club. Once the playoffs start, their games count here too.
Model estimates
🔒 5v5 · as of Jun 14, 2026Last season's ratings on this season's shots. The per-player ratings behind these rows were fit as of 2026-06-14, before 2026-27 opened, and stay fixed until the season has enough games to refit. They are applied to the shots 2026-27 has actually seen, so the rows update daily; a player the fit never saw counts as league average.
These four are shown within-season centered — each against this season's own league average, not the fit's career-pooled one — because shooting talent leaguewide is running well above its historical zero point this season; without that adjustment nearly every bar would read "above average." The against columns still barely vary between teams, since every team faces roughly average opposition, so for those two the rank still matters more than the level. They are shown because they genuinely move adjusted xGF% below (computed from the uncentered ratings — see that section's own note), and folding them into the two own-team rows would have hidden half of that.
How it's built, and what it isn't
How it's builtEvery 5v5 shot is re-scored with
σ(logit(xG) + shooter − goalie) and both ends re-summed. Both skill terms land on
every shot — one team's for side, the other's against side — so the league share still
averages 50%. The two moves are taken in that order and sum exactly to the total;
shares don't decompose additively, so a side-by-side split would not close.
What it isn'tA descriptive re-score of shots already taken, not a forecast. Against future goal share the combined adjustment is indistinguishable from plain xGF% (+0.019 r, p = 0.192); only the shooting half shows a small honest lift (+0.026, p = 0.020), and the saving half contributes nothing forward-looking. The premise underneath is itself unestablished — xGF% over GF% is +0.040, p = 0.246. Read it as what this roster's skill was worth on these shots — nothing more.
The four segments are the four rows above, in order. They are four and not two
because η puts both rating terms on every shot: the shots we took carry
our shooters and the opposing goalie, and the shots we faced carry their shooters
and ours. Over a full season the two “against” terms would sit near league
average and contribute nothing — but the ratings are not centred at zero this
season, so they do move the number, and hiding them inside a single “shots faced”
figure would have left half the adjustment unexplained.
Season context
season to dateFull table · all numbers
| Family | Stat | Value (current slice) |
|---|---|---|
| Observed ◆ filtered | Goals for / against | 34 / 55 |
| Observed ◆ filtered | xG for / against | 29.1 / 45.5 |
| Observed ◆ filtered | Shots for / against | 312 / 460 |
| Observed ◆ filtered | Attempts for / against | 703 / 893 |
| Modeled 🔒 5v5 | Shooting — our skaters · on our shots, vs this season's average | -0.8 G 22nd pctl |
| Modeled 🔒 5v5 | Saving — our goalies · on shots faced, vs this season's average | -3.3 G 3rd pctl |
| Modeled 🔒 5v5 | Shooting against — their skaters · on shots faced | +0.2 G 69th pctl |
| Modeled 🔒 5v5 | Saving against — their goalies · on our shots | +0.2 G 69th pctl |
| Modeled 🔒 5v5 | Unadjusted xGF% | 39.0% |
| Modeled 🔒 5v5 | ↳ shooting shift | +0.54 pp |
| Modeled 🔒 5v5 | ↳ saving against shift | -0.89 pp |
| Modeled 🔒 5v5 | ↳ shooting against shift | -0.89 pp |
| Modeled 🔒 5v5 | ↳ saving shift | -0.81 pp |
| Modeled 🔒 5v5 | Adjusted xGF% | 36.9% 3rd pctl |
| Context | Ice time — share by strength | +1.2 |
| Context | Score state — TOI by game state | trails a lot |
| Context | Goalie workload — starter's share of shots | 60% |
| Context | Schedule strength — opponents' net xG-RAPM | — |
Observed values reflect the active rink filters; modeled values are fixed at their 5v5 fit.
Modeled ratings come from joint__baseline_xg__f3e3111e
(as of 2026-06-14) — a separate surface from the
box-score xG model badged in the footer.