Batted Ball Charts
Where a hitter's batted balls go — spray angle against launch angle. Whenever "xwOBA" is mentioned, it is referencing a model calculated from bat speed, launch angle, and spray angle.
How it works
Every batted ball is a point at its spray angle (-45° at the pull-side foul line, 0° dead center, 45° at the opposite line, for either hand) and launch angle. A Gaussian kernel density of the hitter's points is created for the player, and the league's density over every MLB batted ball that season is subtracted. Red is where this hitter's batted balls land more often than the league's, blue less. The lines split into Pull / Center / Oppo (-15 & 15° spray angle) and Ground Ball / Line Drive / Fly Ball / Pop Up (10°, 25° & 50° launch angle, per MLB guidelines).
Self (prior year) subtracts the hitter's own density from the season before, instead of the league's.
Team-wide pools every batted ball hit for a team (a traded hitter only counts batted balls for that team).
Bats appears for a switch hitter: their chart is for one side at a time, starting with the side they bat from most, and every view and comparison uses only the batted balls hit from that side.
xwOBA (2024 on) shades the same grid by expected wOBA from a model of spray direction, launch angle and bat speed, averaged over the hitter's bat speeds on balls in play. The boxes are the model's xwOBA of the balls hit into each zone, each at its own bat speed.
xwOBA vs MLB (2024 on) is the batted-ball chart again, counting value rather than balls: the hitter's density with each ball weighted by its xwOBA, less MLB's batted balls weighted the same way. Red is where the hitter gets more xwOBA than MLB's hitters swinging that hard, blue where they get less; the boxes are each zone's part of the gap, and add up to the figure in the subtitle (the hitter's xwOBA on contact less MLB's off swings as fast as theirs).
Bat speed is Statcast's bat tracking, via Baseball Savant, which covers full seasons starting in 2024 (tracking started in July 2023); bunts were excluded.
Data: regular-season balls in play with a measured launch angle and stringer-based hit location coordinates, via MLB's Statcast API. Spray angle is calculated from the hit coordinates, not directly measured.