clock menu more-arrow no yes

Filed under:

Introducing a Pitch Shape Tool

Everything’s better with a viz.

Perhaps the idea at the heart of Rays pitching philosophy is that “unusual stuff plays.” The Rays have gone out of their way to acquire pitchers with a pitch or two far outside the norm (Pete Fairbanks’s slider speed/drop, Ryan Thompson’s arm angle, others), even if those pitchers had yet to have success. They’ve also developed young pitchers with unusual pitches (Colin Poche’s fastball rise).

But how does one define “unusual stuff,” and then how does one find it? It’s hard to conceptualize the trajectory of a pitch in three dimensions, and then understand it in the context of all the pitches across baseball, with multiple valid frames of reference.

So I’ve built a tool to help explore pitch shapes in three dimensions.

Note that this will only work well on a real computer with a full-sized screen. If it seems like it doesn’t fit on your laptop screen, zoom out in your browser and then refresh the page. I’ve had better experience in Chrome than in Firefox, but both work and your experience may vary.

If you feel shaky in your understanding of the theory and practice of pitch tracking analysis, I’ve written a historical primer and survey of the sources and use, which you can read here. I hope it’s what you wanted, those of you who have asked. So feel free either to pause and read that now, or plow right on ahead. Then click over to the tool in another tab, and let’s walk through together how it works.

The Tool: 3D Pitch Shapes in Player and League Context

Great. Glad you made it through that. Or glad you skipped that. Really just glad you’re here, whatever the journey.

The point of this tool is to help us see pitch shape in three dimensions (speed, horizontal movement, and vertical movement) while simultaneously being able to compare that pitch shape to the rest of a single pitcher’s arsenal, to other individual pitchers’ offerings, to league average, and to all the various possible medians and groupings of pitches.

The y axis is vertical movement from the catcher’s perspective relative to the theoretical spinless pitch, the x axis is horizontal movement from the catcher’s perspective relative to the theoretical spinless pitch, and the color scheme is based on speed relative to pitch type. That last dimension — speed relative to pitch type — is at the heart of the tool and requires more explanation.

Speed Relative to Pitch Type

If we were to color code all pitches based on their speed, we would end up with a lot of red fastballs, and a lot of blue curves, and then everything else in shades of grey between. The shading wouldn’t tell us all that much other than “this pitch is a fastball,” and 96 mph would look similar to 91 mph.

What we really care about, though, is relative speed. Is it a fast fastball? A hard or soft curve? Peter Fairbanks and Dane Dunning have nearly identical movement on their sliders, but Fairbanks’s averages 88 mph while Dunning averages 82 mph. That difference matters. So I’ve calculated the average speed for each pitch type and based the coloring on a player’s difference from that average, gray being average, more red being more speed, and more blue being less.

It works well in the general graphical sense, but there are a few quirks of the methodology (mostly related to convenience and ease of updating for the tool’s backing data) that I need to caveat:

  1. The average is the arithmetic mean of the average pitch shapes of every pitcher to appear in 2020. This means that a player who threw five fastballs in a third of an inning is weighted just as heavily as a player who threw 500 fastballs in 70 innings. This is clearly not the best way of doing things. I’ll attempt to improve eventually.
  2. The color gradient is set by absolute linear differences from average and is constant across all pitch types. That means that the fastest fastball, which is about 7 mph faster than average, is less red than the fastest changeup, which is about 9 mph faster than average. Is this the best way of doing things? Maybe! Or maybe a Z-score like how Brooks presents it would be more visually informative. I don’t know. There’s room to better investigate the spread of speed ranges between pitch types and their effect on the pitcher-batter interaction.

The actual way that the color scheme gets set on the page is with a set of reference pitcher data points who play for the fictional MLB team: Minimum RHP, Minimum LHP, Maximum RHP and Maximum LHP. These are compilation data points (Frankenstein monsters if you will) of the “best” and “worst” characteristics of any given pitch type throughout MLB.

Note that as you turn player, team, or other filters on and off it’s these Minimum and Maximum pitchers who set the speed color scheme to a league frame of reference, and that if you remove the “MLB Team” or restrict which pitchers are displayed based on the quantitative filters, the vizualization will set colors relative only to what is currently displayed.

The Filters

While the filters are mostly self-explanatory, a few have quirks that are worth mentioning.


Currently there’s 2020, 2021, and data for 2022 to the date show in the upper left, which I’ll try to keep updated. The main benefit of my suboptimal method for calculating averages is ease of updating. Eventually I’ll backfill for 2019.


So the one quirk to point out is that righties as a group throw harder than lefties. Because the average velocity used to set the colors is of all pitchers, the clumps of pitches by rightes are more red, and the clumps of pitches by lefties are more blue. I am unsure right now if this is a feature or a bug.


Remember that to display minimum, maximum, or average pitchers, (the ones who set the color gradient) you need “MLB” selected in the team field. Also note that pitchers who appeared for multiple teams in the same year will be under “---”.


This field is searchable. A trick is that if you want to see a specific pitcher’s repertoire in league context, first deselect all pitchers, then search for and select the pitcher you’re looking for, then control-click to highlight all of his pitches, and then clear the name filter to bring the rest of the league back into view (I like to do this with only the handedness in question visible). For an example, here’s Shane McClanahan in 2022:

Shane McClanahan, 2022

Absolute Value of Horizontal Movement

Perhaps you want to know who has the sweepiest sweepy slider, and you don’t care whether they’re a righty or a lefty. This filter can get you that, with both righties and reading as positive number distances from zero.

(The answer is Ethan Roberts and Lucas Luetge.)

Roberts and Luetge, 2022

Total Movement

Most of the time we talk about movement in the vertical plane and in the horizontal plane separately. Maybe that’s the best way of understanding movement’s effect on the batter, or maybe it’s an unfortunate bias of the Cartesian coordinate system.

For instance, Hansel Robles has neither the most rise nor the most run on his fastball, but in combination his fastball ends up farther away from where a “straight” pitch would than just about anyone else’s. Does that make Hansel Robles good? Don’t know, but it makes him easy to find using this filter.

Hansel Robles, 2022

Speed, Component Movement, and the Difficulty with Pitch Categorizations

A thing you might notice as you click around is that pitch type categorizations can blend into each other. Often these categorizations have to do with a pitcher’s total repertoire, and not with the individual characteristics of the pitch, so if you’re looking for a particular movement profile you might need to ignore the classifications and filter it yourself.

For instance, a Humberto Castellanos sinker and a Jason Adam changeup have basically the same action.


Similarly a Cal Quantrill cutter and a Tony Gonsolin slider are more or less the same pitch.

Currently there’s no way to make these similar pitches with different classifications shade their color based on the same velocity average, so in this case you’ll need to hover over the pitches in the chart to read the velo, and cannot rely on the coloring. Dynamic averages is a goal for a future version of this tool.

Baseball Analysis is Fun

Please use this tool to your heart’s content, and tweet at me if you’ve got formatting suggestions or feature requests. I’ll try to update the backing data periodically (and hopefully automate that eventually), as well as incorporate some other aspects of pitching data like release point and approach angle. Data credit is to Pitch Info.