Updated Player Graphs!

We have updated the graphs on our player pages that have been a part of the site since FanGraphs was founded in 2005. The player graphs are now much more interactive and have been updated to feature some of the most popular and commonly used advanced stats on FanGraphs, such as WAR, wRC+, wOBA, OPS and FIP. We are also retaining the left/right and home/away splits options. These new graphs are interactive and have tool tips available on some data points.

Updated Player Graphs Season

There are four modes that represent different ways to delineate time: By Year, By Age, By Day and By Game. By Year and By Age are similar to each other; they replicate what has previously been available on the player pages showing season stats on a line graph with a league-average line. The league-average line is the most noticeable difference between Year and Age. Since the league average for a season is different than the average production for a given age.

The newest feature on the graphs is the ability to create and change rolling averages for players’ stats throughout a season or entire career. By Day replicates the previous graphs which plot a player’s season by calendar days and uses a rolling average in the context of an individual season. By Game creates a career-perspective of the rolling average, so that games from the end of one season are factored into the rolling average of the next.

Below is an example of a 15-game rolling average for Dallas Keuchel, where his games from 2013 to 2016 are plotted against the average of the desired stat over the previous 15 games. Essentially, you are comparing 15-game stretches across Keuchel’s career from 2013 to 2016. This graph is helpful if you want to visualize streaks throughout a career or confirm whether Keuchel had his best 15-game stretch in early 2015.

Updated Player Graphs Game

You’re able to define the interval for how many games to include in the rolling average by using the input for games. It defaults to 15, but you can make it any positive, whole number. If you raise the input for games to a value larger than the number of games the player has played, the graph becomes a running cumulative graph.

Since wins above replacement (WAR) is calculated in the context of the entire season, we have chosen not to represent that stat in a rolling-average form. This includes RA9-WAR. We also don’t currently support splits including GB/LD/FB % as rolling averages either.

We are also looking to build upon this tool to increase the number of stats and splits offered and will continue to develop and improve it.

Technical Notes and Documentation


  • Graphs are visual representations of our main stats, game logs and splits data. Most raw data from each chart can be found in table format elsewhere in the player pages. The notable exception are moving averages; those are calculated from game logs.
  • Some rolling-average charts start plotting the data once enough has been accumulated to achieve the desired number of data points. These charts all start earlier than that, so that game 10 in a 30-game rolling chart will display the average of the previous 10 games. This is done to provide more data and context instead of leaving part of the graph blank.

Year/Age mode

  • Years where the player missed an entire season are designated with a dotted line. Consider Alex Rodriguez’s 2014 season, for example.
  • Players who don’t have data for a split for a particular year have a break in their splits graph. This tends to happen for players who record too few plate appearances/innings during a year.
  • The current season is denoted by an open circle to show (a) the (assumed) smaller sample size, (b) an incomplete season for WAR and that (c) the data point could change daily throughout the rest of the season.
  • Splits, including GB/LD/FB %, are only available from 2002 to present.

Age mode

  • The age given for each data point represents the player’s age season. For example, 2016 is Noah Syndergaard’s age-23 season. This is not the player’s stats delineated by what age he was when he accumulated them.
  • The league average is against the historical age group’s average, not age group’s average within that particular season.

By Day

  • Available from 2002 to present.
  • The reference line represents the full-season total for the stat.
  • These rolling averages start over for each season, which are separated in different facets on the graph.

By Game

  • Available from 2002 to present.
  • Reference line represents the cumulative stat for the selected time period. For example, it would be the ERA for the entire three-year span for a graph of Clayton Kershaw’s 2014-2016 season, which happens to be a 1.97 ERA.
  • For players with graphs that display over 50 games, the first five data points are omitted for scaling purposes. This prevents extreme data points from skewing the y-axis scale.
  • The game number represents the number of of game within in the selected span. This is not necessarily the career game number or season game number.
  • Multi-year moving averages that use stats which have different constants between different years (wOBA, wRC+ and FIP) are calculated by using their appropriate values for each year. If we have a two-season graph of a player’s wOBA, component stats are multiplied by the wOBA weights for the season in which the stats were accrued then summed together. These aren’t simply a 50/50 blend of weights or other value based on the percentage of games in one season or another. Similar calculations are used for wRC+ and FIP which uses a season-dependent constant.

I build things here.

Newest Most Voted
Inline Feedbacks
View all comments
Ryan Brockmember
6 years ago

Is there not an “All graphs” button anymore?

Ryan Brockmember
6 years ago
Reply to  Sean Dolinar

Would be nice if there was still a link to sort of a ‘default view’ of the most relevant/common graphs. Used to be much easier to get a quick snapshot of a player, now I have to click >10-20 times to access all that info..!

Ryan Brockmember
6 years ago
Reply to  Sean Dolinar

I mean, without the ability to view the graphs next to each other and see how changes in one stat correlated to others, the graphs are really significantly worse than before. I don’t think I’ll use the new graphs nearly as often…