This post includes a run-through of how to create a GameFish chart in Tableau.

Hi All,

You may or may not have seen at the end of last week I had the pleasure to do a collaboration with Adam Green. We chose to chart the final of the Womens French Open 2021 for #SportsVizSunday.


So…. I don’t actually know if it has an official name or not. I first came across it on Tennis Visual with that name, liked it, so stuck with it. The visualisation provides a single glance overview of one game from a tennis match. The gamegrid indicates the winner of the point by cell colour.

The whole point of the “Game Tree” or GameFish is a depiction of Point Progression for a selection of games within a tennis match or across a series of tennis matches; it possesses the “Markov property”, meaning that the set of future “states” that are possible are constrained by the current “state”, the point score at any moment in a game. 

The best bit is, It can be customised to your liking! you will see Adam and I chose to highlight aces and double faults on the grid using coloured circles, deviating slightly away from what you will see on the Tennis Visual.

One thing to note on formatting: I chose to do the colouring of points based on when the point was started. You will see a lot of the charts created have 0-0 as a clear box, and 15-0 as the first coloured box.

Myself, I colour the 0-0 box on whoever wins the first point, which then in turn making the score 15-0. Personally, I found this more intuitive, but understand where others may differ in opinion. You will notice how this will impact our data preparation later on.

However, this won’t impact the way we look to build the base of the visualisation.

If you would like to use a reference point, please access the tutorial data & visualisation, here.


I think a great starting point to understand my methodology behind the build is to take a re-read of Understanding Polygons Part 1 and Understanding Polygons Part 2 They both will cover off in more detail how to utilize different polygons, and lines as shapes in greater detail.

So what you will see is multiple lines forming the grid. To build this, we need all possible outcomes that can happen within a match. I start by mapping the very first point of 0-0.

But what do we need for one point?

Take a look at the data prep sheets to see that each individual point requires 5 lines of data.

We join these together with a relationship of 1=1, to create for each point, the equivalent 5 points.

So why do we need 5 points, not 4?

If our chart was going to use polygons, then 4 points would be fine, as it would join up automatically then end of the 4th mark back with the 1st.

However, As we want our background grid to be a line chart, we require 5 points. This extra 5th point joins the 4th point back up to the 1st.

What does this look like?


So…. this is the base for the first point of the game. But now we need to plot every other possible point in the game as well as add in the context of the match itself. As really we have just built a diamond so far!


With the first point in place, it is time to place the remainder of points within the map. i.e 15-0,30-0,40-0,15-15 etc etc. As a reference point I felt it easier to build everything with respect to the 0-0 start point. You will see that every other point is therefore a transposed version of these marks.

I introduce two new columns of X Shift and Y Shift values that shift the shape, right & up/down based on where the point needs to be positioned.

Note: This is why I built the original point as an equal diamond. This meant shifting the values by a constant a lot easier to align.

Lets revisit the data

For each of these outcomes we create a new grid of the 5 points from the square sheet. Then by adding the Y shift to our Y Values and X Shift to our X Values we can move the diamond that is created, up/down and right of the first game point.


Now we have the data prepped we can take a look at how this is reflected in the build.

Here are the calculations

X Point

[X Square]+[X Shift]

Y Point

[Y Square]+[Y Shift]

Add Point ID to detail and Line ID to the path/Line ID.

See how we have replicated the diamond for the remaining points. The 0-0 point is highlighted here in blue.

Now we have the grid laid out, we want to align a match to the points.

Let’s take a sample game from the French Open Womens 2021 Final.

Finishing the build

This is where you need to give some consideration as to what you are plotting.

Let’s revisit the sample data.

I’ve organised the data for my desired effect. This is what I was referring to earlier when I said in the TennisVisual example 0-0 isn’t coloured. Whereas in mine, I colour a lag of 1 point.


How do I build out for multiple games?
You can either build them in separate sheets, or create new columns that will look to ‘shift’ the games outwards in terms of on its X-axis if you want to build them in the same sheet like Adam & I did.

You will see I have left in two blank columns (X Game Shift, and Y Set Shift) These values would be a way for me to transpose a whole game to the right, or down for each set.

Check out some of these details in the full build with Adam.

Here are some example calculations that may help you with your journey.

MP. Base

MAKEPOINT([Y Point],[X Point])

We can use this to build a line chart base.

We can add a second layer of colour using the polygon tool.

MP. Colour Base

[Match Id] =
MAKEPOINT([Y Point],[X Point])

This calculation says where we have a point within our tennis data, then acknowledge the points we plotted using the polygon mark.

Lastly, let’s add some circles into the middle of each square.

Remember we currently have 5 points for each ‘game point’ – so I look to just take one of these.

MP. Circles

if [Match Id] =
and [Line ID] = 1
MAKEPOINT([Y Point]+1,[X Point])

Why do I add 1 to Y Point? Remember our 5 original points are making a diamond, to bring the circle or where line id = 1 into the middle of the circle I just need to transpose (i.e shift right slightly) the point.

With that you can start charting your own games!


That’s a lot of points for a match, is there a better method of creating this chart?

Sure, you could probably replicate similar using the shapes tool and aligning them that way. I am yet to try it but personally wanted to experiment using polygons and lines. I think this method gives me more flexibility and freedom in design.

Perhaps someone could look at trying this themselves using the shapes and sizing tool? It would mean you only need the point by point data instead of 5x the number of values.

Going further:

Try applying it to a game-match of your choosing?

Try adding in new metrics to enhance the visualization?

Try creating a similar effect using only shape files

CJ Round-up:

So to finalise, I want to say another thank you to Adam Green. Please check out his profile here, it is a great collection of vizzes with a wide variety of styles and techniques. I had so much fun piecing this together with him. In the on coming weeks I am hoping to showcase the build on a VizConnect, keep an eye out for it.