Calculating Arm Angles Using Statcast Data


Before we talk about how to calculate arm angle there’s a question that must be answered: why would someone want to calculate arm angle/arm slot in the first place? 

The motivation behind this project stems from something that happened in the 2020 ALCS – Astros vs. Rays. The diversity in release points of the Rays pitching staff was revealed through a picture that blew up after Game 1 of the series. I’m not exactly sure who is responsible for the graphic so I can’t properly credit them but it’s a fantastic visualization that reminds me of how hard it must be to hit in the major leagues. This picture planted a seed in my mind that hadn’t sprouted until recently. Release points are useful and make for fantastic graphs but they aren’t exactly the same as arm angle or arm slot. If we can identify a pitcher’s arm angle, it will at least be a more interpretable version of release points – right? 

There are both micro and macro-level implications when considering a pitcher’s arm angle. Firstly, on a purely mechanical level, teams have access not only to arm angle data but many other important and niche metrics related to the biomechanics of their pitchers – for teams, arm angle data in this situation would be redundant at best. However, it may be of use for teams (or anyone interested) to know every pitcher on every pitching staff’s arm angles for every pitch they throw, from the 2015-2020 seasons. The reason(s) being only limited by analytical creativity. At a macro level, there are many questions to be answered if we have this data. Here are a few off the top of my head, hopefully, I can answer them soon:

  • Do pitchers who throw from higher arm slots throw harder?
  • What’s the relationship of spin rate between arm slot groups?
  • Do a pitchers’ arm angles change with age?
  • How can arm angle consistency be defined?
  • Does arm angle consistency have any relationship to BB%, K%, FIP, pitcher WAR, pitch values, etc.? 
  • In terms of arm angle, who are the most consistent pitchers in baseball over the past few years – why?
  • Do hitters who see pitchers with similar arm angles perform better against them?
  • How are arm angles distributed?
  • Do bullpens/pitching staffs with a high variance in arm angles perform better than teams with a low variance in arm angles?
  • What’s the relationship of arm angles between pitches?
  • Do pitchers that have dramatically different arm angles between pitches perform statistically worse?
  • How accurately can spin axes be calculated from arm angle?
  • How can we understand pitchers who purposely changes arm angles like Rich Hill or Nestor Cortes, better?
  • Do pitchers with certain arm slots throw pitch X or pitch Y better than pitchers without that arm slot?
  • What’s the adjusted R² between arm angle ~ spin rate/velocity/launch angle/release extension/release point/height/GB%/FB%/LD%/etc.?
  • Can we use arm angles to better classify pitchers using cluster algorithms?


Regardless of your familiarity with the release position metrics offered by Statcast, visually, here’s how they work. The Y-axis works vertically from home plate to center field and the X-axis is a measure of horizontal distance working east to west, both are measured in feet. The Z-axis, something that is of particular interest in the calculation of arm angles, is a measure of height. It’s unclear if the origin of this field-level coordinate system lies at the top of the mound in the center of the rubber, however, I’m making the assumption that it indeed does.

The calculation of arm angles comes down to the formation of triangles. To illustrate what I’m talking about, let’s take Shane Bieber as an example. Bieber has a clear 3/4 delivery – at least as far as eye test goes. If we split the pitching rubber in half we can use Bieber’s arm as the hypotenuse of the hypothetical triangle we are creating. The opposite angle is defined by the absolute value of the average release position x, another assumption made in this calculation is that the middle of a pitcher’s body is roughly aligned with the middle of the pitching rubber such that the average release position in the x-direction reflects the actual distance of the arm from the middle of the rubber at extension. Of course, not every pitcher works in the middle of the rubber, luckily this doesn’t seem to make that much of a difference in the outcomes of arm angles – more on this later. The calculation of the length of the adjacent side involves a bit of subjectivism. We know that the top of the adjacent side is the same as the release position in the z-direction, but to find the bottom we will take the average release position z minus the height of the player scaled by 0.7. Why does height need to be scaled? The foot strike phase of each pitcher’s mechanics (when they are athletically arched over and stepping down the mound) needs to be accounted for. I’ve, again subjectively, estimated that on average the bottom of a pitcher’s arm (aka shoulder) is approximately 70% of his height when standing on the mound. The height data is not provided by Savant so I had to use heights from the Lahman database.

If you’ve been paying attention, I’ve left out the length of the hypotenuse and you’re right! Although we don’t technically need the length of the hypotenuse  in the calculation of angle θ, it’s still worth figuring out just to have more data. If you still have some trigonometry knowledge leftover from high school, you’ll remember that we can calculate the hypotenuse by taking the square root of the sum of the squares of each adjacent and opposite angles. 


Moving onto the actual calculation of the arm angle (θ). Another trick out of the trig bag will tell us that if we have the length of each side of our triangle we can calculate angle θ by the following equation. This equation will produce our desired angle in radians rather than degrees, luckily for us, this is an easy fix. Before we get to the results, I want to clarify that these are approximations. Not only because of the relative subjectiveness regarding the calculation of the adjacent side of the triangle but because of the seeming flimsiness of the release position x statistic due to natural differences that arise between pitchers’ release points relative to the middle of the pitching rubber.


Before I cut to the chase and show the data I should add one little note. For the sake of interpretability, these are average arm angles for every pitcher’s pitch from 2015-2020. If you’d like pitch-by-pitch arm angles, the relevant code and data can be found on my GitHub linked below.

So enough beating around the bush, here’s the data. If you’re still interested in the Shane Bieber example above or any other player, feel free to type in their name. For the most part, I find them surprisingly accurate with a few exceptions. The inaccuracies are mostly pitchers who have “overhand” arm slots. For example, Anibal Sanchez has a clear overhand arm slot, according to my calculation he had an average arm angle of roughly 0° on his 4-seam fastball in 2018. Whether you find that believable is somewhat up to opinion. Anibal might’ve had a 20° average arm angle on that pitch, but he still would’ve been classified as “overhand” on that particular pitch. The point is, we’re splitting hairs – these are approximations after all.

The filtering on the table is a little wonky, if you want to order a stat in ascending/descending order it doesn’t apply to all the data at once, you’ll have to work it a bit to find the desired results but they’re all there. I’ve also added labels to each arm slot based on this this article, with some minor tweaks (Overhand = 0°-30°, Three-Quarters = 30°-70°, Sidearm = 70°-90°, Submarine = 90°+). This will allow you to filter particular arm slots rather than sifting through continuous data. 

As always the code for this project is located on my GitHub. I would greatly appreciate any feedback, I’m always in the process of learning and getting better.

You Might Also Like
Leave a Reply