Methodology, data sources, and background
← Back to Home · 30-Team Grid Explorer · Single-Team Position Breakdown
I had the idea for this project in 2019 while playing around with FanGraph's Cumulative WAR by Age charts. I was comparing charts for good Mariners at different positions across the team's history, and thought that being able to graph them "in time" would be an interesting storytelling visualization. There's no particular analytical value to these, but you can see the peaks and troughs in a franchise's history, and there are occasional surprises and interesting players that you'll find looking through the graphs.
I got partway into the project in 2020 before being derailed by life, as well as my own lack of R skills. Luckily Copilot is good at R, and I finished my initial vision in a couple weekends of work in 2026.
These visualizations chart cumulative WAR (Wins Above Replacement) over time for the top players at each MLB franchise. Each line traces a player's career value as it accumulates season by season — steeper lines mean peak performance years, flat sections mean missed time or league-average play. The higher a line ends, the more total value that player delivered to that franchise. Of course this necessarily de-emphasizes the contributions of players who moved between teams frequently, or perhaps had one or two standout seasons. That is by design.
Z-Score Line Width: When enabled, line thickness encodes how exceptional a player's WAR was relative to their position and era. For each position and year, we compute the mean and standard deviation of WAR among qualified players at that position (≥60 games for fielders, ≥30 for DH/RP, ≥15 GS for SP). The positional mean is smoothed with a 3-year rolling average to reduce year-to-year noise; the standard deviation is left unsmoothed to preserve actual within-year variance. The width represents how many standard deviations above the mean a player's season was. Thicker lines = more dominant seasons compared to peers at the same position.
Overlay Markers: Award markers can be toggled on top of the WAR lines. ♦ Diamonds mark MVP awards, ▲ triangles mark Cy Young Awards, and ● dots mark All-Star selections. Postseason overlays add vertical lines at each year the franchise appeared in the playoffs, providing context for when teams were contending.
The 30-team grid view. See all franchises side by side, filter by position (C, 1B, 2B, SS, 3B, OF, SP, RP) and era (1901–present). Toggle z-score line widths, award markers, and postseason indicators.
Open Explorer →Dive into a single franchise with a 9-facet view — one panel per position. Compare how a team has built value at each position over its history, with linear or log scale options for the Y axis. The log scale compresses peaks, but makes the low-WAR positions like relief pitcher easier to read and compare.
Open Breakdown →WAR data from Baseball Reference (daily WAR tables for batters and pitchers). Position classification, awards (MVP, Cy Young, All-Star), and postseason appearance data from the Lahman Database.
Each visualization shows the top 5 players per franchise (grid view) or per position (team breakdown). Players must have at least 2 seasons with a franchise to qualify. When a player is traded mid-season, their WAR is allocated to each franchise separately, and cumulative WAR is tracked independently per franchise.
Each player is assigned a single primary position based on where they played the most career games. Outfield positions (LF, CF, RF) are consolidated into OF. Pitchers are classified as SP or RP based on whether games started exceed 50% of total games for that franchise. In team breakdowns, DH is assigned per-franchise (a player must have more DH than fielding games with that specific team). Two-way players like Ohtani are assigned one position — there is no special handling to capture contributions at multiple positions.
I'm grateful to Kieran Healy's excellent writing on data visualization, and to Dave Cameron and Jeff Sullivan for their seminal baseball writing in the oughts at USS Mariner and Lookout Landing.
Known issues and possible quibbles: