How to read this map
One rink, both ends while Evgeni Malkin is on the ice: what the team generates on the left, what it concedes on the right. Every attempt is a Gaussian bump of height = its model xG, summed per 60 minutes of ice time (a player's exposure is time, not games). The controls switch the surface (xG heatmap ↔ vs league, the league baseline per team-hour at the same strength) and the markers: × goal · • on net · ◦ missed · small • blocked — and own shots narrows the left end's markers to attempts Evgeni Malkin took.
The page opens at 5v5; empty-net attempts are excluded throughout. On-ice membership comes from the shift charts; attempts without usable shift coverage are absent from both ends. Blocked-shot membership cannot be cross-checked against the play-by-play, so treat blocked-marker detail as softer than the rest.
Observed production
5v5 · on-icePercentiles rank against the other forwards over the display floor at the selected strength — a non-strength filter (rush, period, …) moves the bars but keeps that strength's spread as the backdrop.
Rolling on-ice xGF%
5v5 · on-iceModel estimates
🔒 full season · not filteredRanked against forwards; the band behind each bar is that cohort's spread (p5–p95, middle half brighter, dashed median), so where a bar lands against its band is the rank — the ordinal beside it makes that exact. The per-shot rating is quality only: it says nothing about how many attempts a player generates or faces, which is what the attempts sub-row is for.
Usage & context
descriptive · not modeledA skater absent from the fit counts as exactly cohort average (0) in QoC/QoT — the same claim ridge shrinkage makes. Penalty rates are descriptive only: taken-rate includes defensively correct penalties, and neither side is opponent- or deployment-adjusted. Nothing here is priced in goals.
Full table · all numbers
| Family | Stat | Value (current slice) |
|---|---|---|
| Observed ◆ filtered | Goals on-ice for / against | 44 / 30 |
| Observed ◆ filtered | xG on-ice for / against | 39.2 / 34.8 |
| Observed ◆ filtered | Shots on-ice for / against | 361 / 343 |
| Observed ◆ filtered | Attempts on-ice for / against | 696 / 746 |
| Observed ◆ filtered | xGF% | 53.0% |
| Modeled 🔒 season | Shooting — finishing · goals/60 | +0.17 93rd pctl |
| Modeled 🔒 season | ↳ attempts (own attempts) | 5,721 97th pctl |
| Modeled 🔒 season | ↳ shooting talent (per-shot logit) | +0.23 97th pctl |
| Modeled 🔒 season | Offense — RAPM · team xGF/60 impact | +0.18 88th pctl |
| Modeled 🔒 season | Defense — RAPM · team xGA/60 impact (sign-flipped) | -0.16 10th pctl |
| Modeled 🔒 season | GAA/60 | +0.19 81st pctl |
| Context | Time on ice — all situations · min per game | 17:29 (75th pctl) |
| Context | Penalties taken — minor penalties / 60 | 1.54 (93rd pctl) |
| Context | Penalties drawn — minor penalties / 60 | 1.15 (82nd pctl) |
| Context | Zone starts — OZS% · O-zone start share | 72% (100th pctl) |
| Context | Score state — TOI by game state | trail 21%, tied 34%, lead 45% |
| Context | Competition (QoC) — opponents' net xG-RAPM | +0.000 (36th pctl) |
| Context | Teammates (QoT) — teammates' net xG-RAPM | +0.040 (78th pctl) |
| Context | On-the-fly — share of 5v5 TOI | 70% |
Observed values reflect the active rink filters; modeled values are fixed at their full-season fit.
On-ice numbers pair the regular-season shot set with shift-chart membership;
skaters and goalies under the display floors are fit but not shown. Modeled rows come from the
value artifact keyed to RAPM fit rapm__c5b9b663 on flat__joint_structure_xg__4f64c88b
(the joint-xg structural baseline), with ratings from
joint__baseline_xg__42ccb89b (as of 2026-06-14) —
separate surfaces from the box-score xG model badged in the footer.