Introducing the FanGraphs Lab

Today, we are proud to announce a new site feature: The FanGraphs Lab. The Lab is a collaboration between the editorial team and the engineering team here at the site, a joint effort to create more ways to sort through and visualize the huge crush of data that pervades baseball these days.

The FanGraphs Lab is a space for experimental data visualization and exploration tools that we believe might one day have a permanent place on the site. The key word there is experimental: One of the reasons we’re so excited about the Lab is that it’s never been easier to go from an idea for a new tool or visual to a functioning version of it. It’s not quite “if you can dream it, you can do it,” but it’s closer than you might think, which means that there’s a lot of room for innovation. The Lab will have a permanent home at www.fangraphs.com/lab. It will also be accessible from the main page of the site on the right navigation bar:

This project grew out of a discussion between the two of us. Actually, “discussion” might be the wrong way to put it: Ben just kept sending Sean links to new apps he had built in rickety programming languages, fun graphing tools without any immediate use case. Instead of politely telling Ben to shove off, Sean came up with a process for turning those concepts into functioning FanGraphs tools. First, with development assistance from Claude Code, Ben rebuilt his initial ideas in the FanGraphs code base. Next, Sean integrated these new pages into the site’s data and infrastructure. From there, we bounced ideas off of each other and iterated until we were happy with the output. After taking a few months to jump-start the process, the first prototypes are coming off the assembly line now.

The Lab’s tools will use a wider variety of visual styles than you might used to seeing on FanGraphs, and features might be abruptly added or changed. Not all of the tools that we test will stick around forever. Conversely, popular tools will likely get integrated into the main site over time by Sean and Keaton Arneson. We hope this process yields plenty of useful failures and obvious successes, with the Lab giving us space to try new things and refine our ideas.

You Aren't a FanGraphs Member
It looks like you aren't yet a FanGraphs Member (or aren't logged in). We aren't mad, just disappointed.
We get it. You want to read this article. But before we let you get back to it, we'd like to point out a few of the good reasons why you should become a Member.
1. Ad Free viewing! We won't bug you with this ad, or any other.
2. Unlimited articles! Non-Members only get to read 10 free articles a month. Members never get cut off.
3. Dark mode and Classic mode!
4. Custom player page dashboards! Choose the player cards you want, in the order you want them.
5. One-click data exports! Export our projections and leaderboards for your personal projects.
6. Remove the photos on the home page! (Honestly, this doesn't sound so great to us, but some people wanted it, and we like to give our Members what they want.)
7. Even more Steamer projections! We have handedness, percentile, and context neutral projections available for Members only.
8. Get FanGraphs Walk-Off, a customized year end review! Find out exactly how you used FanGraphs this year, and how that compares to other Members. Don't be a victim of FOMO.
9. A weekly mailbag column, exclusively for Members.
10. Help support FanGraphs and our entire staff! Our Members provide us with critical resources to improve the site and deliver new features!
We hope you'll consider a Membership today, for yourself or as a gift! And we realize this has been an awfully long sales pitch, so we've also removed all the other ads in this article. We didn't want to overdo it.

Some tools are built to use the site’s regular data flow and will be updated whenever we load new data, while others use limited, pre-calculated data sets. Some will use experimental metrics or novel analysis; others will leverage existing statistics or present popular analytics in new permutations. We’ve purposefully given ourselves the ability to do a great variety of things in this space, because we’re still experimenting with what’s possible.

On a personal note, I (Ben) have had an incredible time making these tools. There’s something inherently satisfying about doing something new and different, and making data visualization tools definitely counts as that for me. Seeing things I can picture in my head take shape on the website is a wonderful sensation. I’ve already gotten ideas for new Lab tools from my writing, not to mention ideas for writing topics from my Lab designs. Both of us hope that these tools improve the FanGraphs experience for readers, but I’m already comfortable saying that they’ve made FanGraphs more fun for me.

We hope you’ll play around with these new tools and offer feedback. We’ve included a form for giving that feedback on every page of the Lab, in fact. Everything here is inherently open to change — “still in beta,” to put software terminology on it. If you like something, let us know. If you think it’s missing functionality or should do something else, we’d like to hear that too. We set the Lab up this way because your comments sometimes spark ideas.

That’s the big-picture thinking behind the Lab. Now let’s get into the nitty-gritty of the four tools we’re releasing today.

PitchingBot Visualizer
PitchingBot is a phenomenal tool, and it’s one we haven’t made enough use of. This is the start of us trying to fix that. The model operates on a per-pitch basis, grading every offering a pitcher throws on three axes: stuff, command, and overall. We aggregate that pitch-level data up to a single grade by default – but we don’t have to. This tool instead lets you graph each individual pitch matching a set of criteria – pitcher, pitch type, count, and batter handedness – on any of the three metrics. The pitches are shaded based on their grade. We used the generally accepted heat map scale — red for good and blue for bad — even though Ben’s personal view is that green is good and red is bad. Such is life.

If you’re looking for where Paul Skenes locates his changeup in strikeout counts, and what our model thinks about those locations, you can get that:

If you’re more interested in where Jacob deGrom throws his fastball early in the count, or whether his best stuff is associated more with pitches in the zone or ones he bounces, that information is only a few filters away:

You can do any permutation of inquiries like that, in fact. And if you’re looking for more descriptive data about the pitches you’ve selected, click the Analysis button for more:

You can separate middle-middle misses from balls in the dirt, investigate how pitch characteristics in a given sample differ from that pitcher’s overall baseline, and more. We’re still figuring out more ways to parse and analyze PitchingBot data with this level of granularity. Today, it’s individual pitch grades. In the future, it might be measuring the loud contact pitchers allow or finding optimal locations for unique pitches.

Heat Maps Pivot
The “Graphs” part of FanGraphs has been an integral part of the site from the beginning. Open up any player page, click on Heat Maps, and you can create heat maps of pitch locations and outcomes using a bunch of different filters. Want to see where pitchers throw Juan Soto fastballs in two-strike counts? It’s just a number of clicks away.

That’s all well and good, but heat maps like that are most interesting for their difference. Where Soto sees fastballs in two-strike counts is more interesting if you also know where he sees them in no-strike counts. Similarly, seeing fastball locations is more interesting if you can also see slider locations. Sean, inspired by a conversation with Jeff Zimmerman about platoon splits, had this limitation in mind when we were brainstorming ideas for the initial Lab roster, and he had a solution ready: just show multiple graphs at once. Behold:

If you can think of two variables, the Heat Maps Pivot can create a grid of all the different combinations of them. How does Tarik Skubal change the location of his changeup as he gets more strikes in the count? You can graph it. You can graph how he changes each of his pitches by count, or by batter handedness, or even by time frame:

You can look at either hitters or pitchers. You can look at multiple players at once if you want. You can select any subset of pitches and then pivot those. If you want to see where a pitcher throws his slider in each possible count, you can do that. If you want to see where they throw each pitch in a particular count, or to a particular kind of hitter, you can do that too.

You can create a 2D Heat Maps pivot on:

  • Player
  • Handedness
  • Strikes
  • Balls
  • Pitch Type
  • Date – Months
  • Date – First/Second Half
  • Date – Custom Date Range

You can have any dimension as either rows or columns, and you can filter which values are pivoted. Initially there will be a 15-heat map limit for performance reasons, though this might change in either direction as we test it. We designed the tool with maximum flexibility in mind, so let your pivoting imagination run wild.

Squared-Up Explorer
When Statcast introduced their bat tracking data, they also introduced squared-up rate, and Ben has been fascinated by it ever since. It measures the frequency with which a batter makes flush contact with the ball. It’s calculated by measuring the difference between the theoretical maximum speed that a bat-ball collision could produce and the actual launch speed. If a batter hits a ball at 80% of that theoretical maximum or harder, it’s “squared up.” This is a good measure of bat-to-ball skill, as well as the ability to get the most out of bat speed. That said, one single number for squared-up rate doesn’t tell the whole story.

Different swings square the ball up best at different launch angles. Yandy Díaz and Trent Grisham square the ball up at similar rates, but they don’t do it the same way. Díaz’s swing squares the ball up most frequently when he hits it low; Grisham gets flush contact when he puts it in the air. This tool lets you visualize that difference by graphing squared-up rate against launch angle, showing where different hitters make their purest contact:

Each circle represents how frequently a batter squares up their contact for a given launch angle. The size of the circle is proportional to how often the batter hits the ball at that given angle. That’s how you can tell that Soto hits the ball squarely at all angles, while Aaron Judge’s most frequent contact, and most squared-up contact, is in the air:

You can also see how those hitters compare to league average. Naturally, the overall population of hitters squares the ball up most frequently when they’re hitting line drives. If you’d like, you can graph individual players using the same smoothed curve. Kyle Schwarber and Kyle Tucker have each optimized their swings. Schwarber makes frequent squared-up contact at high launch angles, while Tucker rips line drives and low fly balls:

The Squared-Up Explorer is useful both for comparing players to each other and comparing them to league average. It helps identify players with swing shapes that don’t fit their batted ball distribution, as well as hitters who make the most of their gifts. Is it predictive? No idea. But is it interesting? Absolutely, and we’re optimistic that it’s more than just a curiosity. A granular look at contact quality feels overdue given how much more exit velocity matters in the air compared to on the ground.

Hot Streak
This tool comes from the mind of Jason Martinez, with Ben executing the design. Sometimes aggregate statistics don’t tell the story of how a given stretch of the season actually went. A 150 wRC+ over a week of play could mean a hitter is consistently getting on base – or that they had a three-homer game and then a bunch of zeroes. This tool disaggregates those numbers by showing the day-to-day performance of the entire lineup in one graphic:

Select any team, any season, and any span within that season. Choose whether you’d like to see the nine most-frequent batters, or everyone who appeared in that timeframe. The table view will show you the daily performance of those players in that span, and it helpfully displays the team’s record over that timeframe as well. The graphical view displays 10-game rolling averages for one of a number of available statistics:

Curious how a hot streak or a cold spell by a star player is affecting the team? Wondering if you can see the effect of a utility player putting together an electric week of offense? You can look through the daily performance to find out. You can also get some pre-canned analysis from us. Who did the best in wins? The worst in losses? Who was the straw that stirred the drink, hitting in wins and scuffling in losses? Who was the metronome of the group? We calculate each of those automatically. It’s notably missing the pitching half of the equation, but if you’re looking for an explanation of how a team’s offense did, this view has all the information you could possibly need.

So go out and have fun with these tools. We hope you like them, and we’d love to hear from you about it. Comment in this article, use the feedback option on the lab pages, or let us know on social media. We’ll be listening – when we aren’t too busy tinkering around in the Lab, that is.





40 Comments
Oldest
Newest Most Voted
OaktownSteveMember since 2023
5 months ago

Yay. Incredible. Data visualization is a weird obsession of mine. Can’t tell you how much I appreciate Fangraphs for making my baseball and fantasy baseball experience fun. Thank you!

Last edited 5 months ago by OaktownSteve
MoateMember since 2022
5 months ago
Reply to  OaktownSteve

Seriously, this is why I am a member!

NashvilleSoundsMember since 2018
5 months ago

This looks like a ton of fun! Nice work.

nmtaylorMember since 2021
5 months ago

Now I’m going to get even less work done at the office, thanks for that

sadtromboneMember since 2020
5 months ago

Ben! How dare you two drop these amazing features on me when I have work to do! I never going to be able to tear myself away from these.

aglossmanMember since 2016
5 months ago

Lab League!

acal22Member
5 months ago

awesome stuff. Hot Streak one is especially interesting to me, haven’t seen an analysis like that before. Will def be playing around with it!

clemlibbyMember since 2019
5 months ago

WOW Ben and Sean and everyone who worked on creating this. For “visual learners” these tools are fantastic! I can’t wait for the regular season to start!

JameyMember since 2020
5 months ago

I love this.

I’ve already put in my first feature request to make it even better. 🙂

Broken BatMember since 2020
5 months ago

Really cool. Where would I look on FG in future to possible refresh or review “ how to” instructions?

Ben ClemensFanGraphs Staff
5 months ago
Reply to  Broken Bat

There will be a ‘Lab’ tag for all blog posts introducing Lab tools, and every lab tool we introduce will have instructions, so hopefully that will handle it.

MTfor42Member since 2025
5 months ago

Is there any chance a color toggle switch could be added? I’m color blind enough that sometimes the graphs are hard to differentiate. Thanks!

Ben ClemensFanGraphs Staff
5 months ago
Reply to  MTfor42

Indeed we can.

dangledangleMember since 2024
5 months ago

Great great work I’m looking forward to exploring it!

isaacprinceMember since 2023
5 months ago

This is a pretty massive deal. Your guys’ work is amazing.

baseballfan115Member since 2020
5 months ago

This is amazing! Thank you!

Shirtless George Brett
5 months ago

My productivity at work is gonna take a huge hit from this lol.

MichaelMember since 2020
5 months ago

I appreciate the transparency that claude code was used to make this a reality. Like everyone else in a data/tech adjacent field I’m interested in (and a little terrified of) how effective these things are.

kenkenkenMember since 2021
5 months ago

Thank you, I never need to leave this site now

francis xavier pfefferMember since 2025
5 months ago

That hot streak visualizer is going to be so fun to track over the season!

Daniel -Member since 2025
5 months ago

This looks incredible!

iiJayBeeMember since 2016
5 months ago

green is good and red is bad” is great unless you are red/green colorblind, which is the most common form; then it just becomes “grey is good and grey is bad”

Ben ClemensFanGraphs Staff
5 months ago
Reply to  iiJayBee

colorblind support is incoming on Squared-Up Explorer, and we’re now taking it into account for future tools. Just an oversight by me there because I was so excited about making a new data viz in FanGraphs green.

formerly matt wMember since 2025
5 months ago

This is great! The other day I was looking at the sweet spot trackers that I think Michael B. posted on Bluesky and was like “where can I get those?”

scottbotMember since 2024
5 months ago

I work for a fortune 50 company and we have nothing this nice in house for data wrangling: thank you!

JimmieFoxxalorianMember since 2020
5 months ago

Phenomenal stuff. Thank you!

drewsylvaniaMember since 2019
5 months ago

Best value on the Internet.

gr44
5 months ago

Love it! Have tried to get the squared up data to show me something for months and this is more interesting than anything I could come up with. Can you give any hints on what language or libraries you are using most?

Ben ClemensFanGraphs Staff
5 months ago
Reply to  gr44

These tools are in React, but I like to mock things up in Python first. That’s the part I mentioned before about getting it up to FanGraphs caliber; take the prototype, then rewrite it in something more robust.

chewbaccaMember since 2025
5 months ago

FREAKING INCREDIBLE. Ben, you were born to do stuff like this! I cannot imagine anything more enjoyable than developing and testing models like you are doing. Hitting and pitching coaches will have new and an incredibly robust tool. It will be interesting to see how much they use it. I’m wondering if there is a way to track its usage! CONGRATULATIONS! This is the kind of stuff FanGraphs should do!

treebeardedMember since 2019
5 months ago

Woweee!!! Just when I thought you couldn’t make data any cooler, you go and do it again anyway.

BiscuitMember since 2016
5 months ago

awesome stuff. On the squared up explorer, i noticed that Shohei and Andrew Benintendi have basically the same distribution. but one guy hits it a mile while the other does not. So, it would be interesting to somehow look at the ideal launch angle given the respective average velocities.

formerly matt wMember since 2025
5 months ago
Reply to  Biscuit

In this case I think it’s bat speed–Shohei has a bat speed of 75.8 and Benitendi of 68.7. Benitendi squares up only a little less often than Shohei, but maxxing out a slower swing gets you a lot less.

formerly matt wMember since 2025
5 months ago

The squared-up explorer is giving kind of weird results compared to the overall stats. For instance, Arraez’s graph is pretty much a straight line of dots at 90%, but in the stats box his GB SQ% is given as 86% and his FB SQ% is given as 81%–which doesn’t seem mathematically possible with the graph. Are the stats over there drawing from different sources?

Anyway very cool! Just wanted to flag what looks like a possible bug.

Ben ClemensFanGraphs Staff
5 months ago

The stats are from the same place, but the graphing tool drawing the dots selects a ton of batted balls in the area to handle sample size, and that sometimes makes them look large enough that it’s hard to work out the exact middle. If you turn off the frequency bubbles, you can see that most of Arraez’s launch angles are a hair below 90%, and then he tails off at extreme angles. I agree that it’s hard to tell that precisely from the graph, though, but they both pull from the same dataset.

MichaelMember since 2017
5 months ago

Well done.

KenMember since 2017
5 months ago

Does FanGraphs have to make any adjustments for the new ABS strike zone, whick varies with each player size?

dtpollittMember since 2016
5 months ago

This is right at my intersection of (1) being a fan of baseball and (2) enjoying graphs. I give this a 10/10 will recommend.

DanielMember since 2019
5 months ago

Absolutely love the process here. Results are also cool!

originallyRagsMember since 2018
5 months ago

I see your pitching charts with a “command grade,” and I’m curious about how you measure command.

I consider command as putting the ball where intended, and I think you need to know where the catcher setup to measure that. (To the degree that the catcher’s setup tells us that.)

Good Command: pitcher ahead 0-2 and misses on the next two pitches to go 2-2

Bad Command: pitcher ahead 0-2 and throws two strikes, located mid-mid, and both get fouled very loudly, count still 0-2.

Is your command measure related to balls and strikes?

(Sorry, I’m kind of off-topic on the new labs features. Kudos on that!)