Layout: the hardest and most important thing to get right

What should your dashboard look like?

Should it be a horizontal or vertical? How do you divide up the pieces?

There’s no single right answer. It depends. It depends on your intuition and it definitely depends on getting feedback from people before you publish it.

Let me say that again: GET FEEDBACK FROM PEOPLE BEFORE PUBLISHING ANYTHING.

The best post on this was written by Steve Wexler back in 2011: “Hey, your Tableau Viz is Ugly *and* Confusing

How did I choose the layout for my Fatalities dashboard, the focus of my Design Month posts?

Horizontal. The "best" layout?
Horizontal. The “best” layout?

The answer was I tried everything else and went with what I felt was best.

A vertical layout would have worked very well for a blog post:

Vertical gives much more space in a blog
Vertical gives much more space in a blog

How did I choose? I asked lots of people for their feedback. Some favoured horizontal, some favoured vertical. Their feedback was greatly appreciated. In the end I chose horizontal because left-to-right felt like a more comfortable way to read the story. Horizontal also allows you to compare across charts more easily.

You can make an okay decision about this on your own but it’s not until you share your work and get feedback that you can make an informed decision.

Having made the decision to go horizontal there was one more thing I needed to add – a vertical line between each chart. You can see them below.

Note the vertical lines
Note the vertical lines

The lines allow each view to stand alone. Without the lines, the focus of the dashboard was more blurred. I created these lines separately and imported them as images.

Which do you prefer? Horizontal or vertical?

Should you add a border to marks on your visualizations?

Non-default borders
Non-default borders. Click to see the interactive version.

The highlight table above has white borders around each mark. Why did I make this change to the defaults?

Tableau’s default mark border is None. in this post I will explain why I often find myself changing the defaults. Here’s what the chart looks like with the default border setting:

The highlight table with no border
The highlight table with no border

As I mentioned in my first post about these charts, there’s nothing inherently wrong with having no border. It largely comes down to personal intuition. I think that changing the border to white brings the marks into more focus.

What do you think? Is my highlight table improved by using white borders?

I use this technique at other times with Tableau. I wrote about this when sharing my lollipop chart idea back in March 2011. I sometimes feel our default sizing, with gaps between the bars, creates something of a moire effect. This can be solved by upping the mark size to maximum and adding a white border to the marks:

Which is easiest on the eye?
Which is easiest on the eye?

Should you add borders to your marks at all times? No. Should you add them sometimes? Yes. How should you decide? The good news is that it is so easy to do this in Tableau you can easily try it with our without borders and go with how you feel.

Borders don’t apply just to marks. Should you add them to your legends too? I will leave that question and discussion to Jeffrey Shaffer and his excellent post on borders on legends.

All you need to do is change this section on the Mark Shelf:

default border is none

 

Try it out on your charts – do they look better with mark borders? Borders can potentially enhance all your chart types.

My entry - click to see it bigger
My entry – click to see it bigger

Designing the right tick marks for your date axes

Check out those date tick marks!
Check out those date tick marks! Click to see the interactive version.

It’s no accident that the tick marks are like they are in the above chart. Check out how they’d have looked if I’d left them at their defaults:

1983? THREE? I work in FIVES.
1983? THREE? I work in FIVES.

I’d rather my tick marks were at round numbers (1975, 1980, etc) than at odd numbers like 1983. As I’ve said throughout this series of Design Month blogs, it’s not a big problem but it’s a nice one to solve.

Tick Origin

Let’s look first at the time series:

time series

 

Getting the tick marks to start at 1975 is acheived by using the “Tick Mark Origin” feature that appears when editing time Date dimension axes. Set it to the value of the first major tick mark you want as below:

tick origiin on the time series

 Fixing axes on a slope chart

My slope chart has a couple more tricks up its sleeve.

slope

You can find out more about making dynamic slope charts in a previous post. In this slope chart, I used continuous dates (you can use discrete or continuous depending on what your goal is).

I had to jump a couple of hurdles to show the tick marks correctly and leave space for the line labels at the right of each line.

First of all, I set the tick marks to 36 years in order to show only the years that represent the start and of my slope (1975 and 2011).slope fixed size

The second thing I did was fix the axis range so that there’s space on the right hand edge of the axis for the labels to fit correctly. I used trial-and-error to find the best fit (2022):

slope fixed rangeAre these important? For this slope chart: absolutely. Here’s what it looks like if i reset the axis formats:

slope if it was default

 

 

Note the misleading tick marks on the x-axis and the misaligned line labels.

Conclusion

Slope charts are amazingly powerful and it only takes a few tweaks to the defaults to make them extremely effective in Tableau.

My entry - click to see it bigger
My entry – click to see it bigger

How to control your dates in your Tableau dashboards

You’ve spent hours crafting the perfect dashboard. It has some time based data on it and you’ve used Tableau’s amazing date hierarchy to build it. Every pixel is perfect. You publish it, proud and delighted.

Beware! Don't click the button!
This button might cause pain. Click to see the full dashboard.

And then someone interacts. They see a plus button. They click it.

Boom! What happened? The view’s broken.

But I only clicked the button! I didn't mean to break it.
But I only clicked the button! I didn’t mean to break it.

The viewer leaves your view confused and somewhat disappointed.

Have no fear, this needn’t happen to you.

The plus button is designed so you can drill into and out of hierarchies (find out more here). It’s an amazing feature for exploration and works well on many dashboards.

Sometimes you don’t want this behaviour. In my highlight table above, for example, I don’t want my users to be able to drill into the date any further.

To get rid of the plus buttons when using dates, you can use custom dates. These are date fields focussed on just one level of a date hierarchy and cannot be expanded.

Right-click on your date field and choose Create Custom Date:

Create custom date with box
Create Custom Date

Then choose the date level you want. You can create discrete (“Date Part”) or continuous (“Date Value”) fields at any level from day to year.

Custom date box

You now have a new dimension available. Put the new date dimension onto your view instead of the original date and your view no longer has the plus symbol.

Default dates on the left. Custom date on the right.
Default dates on the left. Custom date on the right.

Well done. You’ve just got control of your guided analytic dashboard back!

Designing a line chart for seasonality

A time series focussing on seasonality
A time series focussing on seasonality (click here to see and interact with the full dashboard)

This month I am focussing on design decisions made on my VizWhiz dashboard. In this post, I’m going to talk about the designing time series line charts to focus on seasonality.

Note: there are other ways to show seasonality, such as the highlight table in the centre of the my dashboard. Andy Kriebel has done the best post about this approach using Tableau; I recommend you read that post.

Back to my chart. Here’s the default:

default

In order to emphasise the seasonality, I made 7 decisions, each of which is explained below.

  1. Draw one line for each year
  2. Use moving average
  3. Add an Average reference line
  4. Use a gradient colour for a subtle indication of years
  5. Add annotations for clarity
  6. Create a custom  legend
  7. Add dots

1. Draw one line for each year

I have written about seasonality before (click here). In this case I wanted Months on the x-axis with a line for each year. That’s very simple to do – just move the dimensions into the correct place:

[Month] on Columns, [Year] on Mark shelf
[Month] on Columns, [Year] on Mark shelf
This gives us a line for each year in the dataset. It’s a nice clear display of which months see the most fatalities.

2. Use moving average

The peaks and troughs are a little bumpy. To smooth out the experience for the end user, I used a moving average. You can see the differences below. The left hand side is easier on the eye and thus the story is easier to digest.

with or without moving avg

I don’t state anywhere on the view that I am using a moving average: I acknowledge that my view is slightly misleading. The tooltip, however, shows the actual value, not the moving average.

3. Add an Average reference line

The thick line is the average for each month
The thick line is the average for each month

The average reference line adds more context to the view. In this single view, you can see each individual year and also get the overall picture of fatalities during each month.

This is documented in a separate post as it’s quite complex.

4. Use a gradient colour for a subtle indication of years

There are too many colours in the chart above. You could put [Year] on the Detail shelf to have just one colour:

Moving Year to the Detail shelf
Moving Year to the Detail shelf

This is ok but it’s hard to see any change between years. I chose to add a subtle colour palette. This indicates there’s a difference between each line but one that’s subtle.

To show the changes I:

  1. Put Year on the colour shelf and chose a red palette
  2. Reduced the size and increased the transparency:
    Colour and size

5. Add annotations for clarity

Now that I have a line for every year and for the average fatalities for each month, I needed to clarify things a little. I annotated values in the upper and lower area of the chart. These provide context for the user.

6. Create a custom legend

legend made in powerpoint
This legend was made in Powerpoint

Tableau won’t create a legend to show that the thin lines are single years and the thick line is an average reference line. I created that in Powerpoint (hat tip to Mark Jackson) and floated the image on the dashboard.

 7. Add dots

dots on average
The dots emphasise the difference between the average and the individual year lines

The final piece was to put dots on the average line. This gives an extra indication that the average line isn’t the same as the fine lines.

dots on colour shelf

I’ve always liked this little feature. It emphasises the marks for the average line, allowing the individual years to further blend into the background.

Conclusion

A time series focussing on seasonality

A time series focussing on seasonality

My end result? A chart, I hope, emphasises not only the seasonality of fatalities in the US, but also gives us a better sense of the data by showing individual years, too.

What do you think? Were my design decisions appropriate?

The full dashboard is available by clicking on the image below:

My entry - click to see it bigger
My entry – click to see it bigger

Adding an average reference line in seasonality charts

A time series focussing on seasonality
A time series focussing on seasonality. Click here to see and interact with the full dashboard.

See the thick line in the chart above? That shows the average number of fatalities in a month for all years in the dataset.

It’s the equivalent of drawing an average reference line for each cell in the view, which you can see below:

Using Average Reference Lines
Using Average Reference Lines

The reference lines are quick and work, but they’re not attractive and are a little difficult to interpret.

To draw the line you need some table calculations.

I’ve recreated the chart using the sample Superstore data and you can see the workbook by clicking on the image below:

Click the image to view the workbook
Click the image to view the workbook

Making the average line

To make this chart, I start with a basic seasonality view: [Month] on Columns, [Year] on Colour/Detail shelf.

I then need to work out the window average in each month. here’s the calculation:

window average

Drop that onto the Row shelf and set the Compute Using settings as follows:
compute using for window average

Now you should have a chart with the regular measure and the average calculation on the Row shelf. Right click one of the measures and choose Dual Axis. Then right-click on one of the axis and synchronise them.

That’s the basic chart done. I had to tweak the Colour, Transparency and Size a little to get a result I was happy with.

An anti-aliasing problem

This is pretty much complete.  But there’s one thing that’s niggling. The average line is jagged:

I can't help but hate anti-aliasing
Argh! Jagged edges!

What’s going on here? Well our average line is actually multiple lines, one for each year in the dataset, drawn on top of each other.

How do we solve that? I created a new calculation:

FIRST()==0

If you set this with the same Compute Using… setings as the calculation above, you get a True/False value. The True value is applied to just one of the lines being drawn on the chart.

Drop this field on the size shelf, right-click on the False mark in the legend, and choose Hide.

Hide false

This solves the anti-aliasing problem and makes the view that small but significant bit nicer to look at.

Conclusion

As you can see in the image below, what I’ve achieved is the equivalent of doing a per cell reference line, but made it much more attractive:

My solution on the left. Default reference lines on the right
My solution on the left. Default reference lines on the right

What do you think? Is this the best way of showing seasonality? Is there a more efficient way of doing this using simpler calculations?

Click the image below to see and play with the complete workbook:

My entry - click to see it bigger
My entry – click to see it bigger

How to design an axis for maximum impact

Axes designed for ease of interpretation
Axes designed for ease of interpretation. Click to see the full dashboard.

When visualizing data, should you leave the axes at their default settings? Almost always the answer is no. The defaults won’t be bad, but I’d bet you could always improve the viz by changing them.

This is part of a series of posts about dashboard design, focussing on choices I made in this dashboard. All of the axes have been altered very deliberately.

In this post, I will first explain the different choices I made. If you want to do these in Tableau, they can all be done via the Edit Axis dialog box (see the help page here)

Here are the design principles I followed:

Don’t show zeroes. 

My story focusses on relative change over time, so I did not show zero in any of the y-axes. You can find out more about the guidelines on including zero here.

with or without zeroes
Without zero on the left: that’s better, right?

Remove axis labels where the measure is obvious. 

Do you need “Year of accident” or “Year” on an axis when it’s obvious what it shows? I’d say no. Do you need to label your y-axis with “Fatalities” when you’ve got it in the title? I’d also say no. You can see how it looks with and without the titles below. Which do you prefer?

with or without axis titles

Show the fewest tick marks you can.

In the image below, you can see the difference between lots and few tick marks. Neither of these are bad but I felt fewer tick marks helped focus on the trend in the data
Which is clearer? Lots of tick marks or fewer tick marks?

Set the axis range so that relevant, round values are shown.

Check out the difference between the default axis on the time chart (lower chart below) and my edited version (upper chart) It’s easier to start your eye at 1975 than it is at 1983:

Compare the default date tick marks to my final ones
Compare the default date tick marks to my final ones

In Tableau, getting round values in your default dates is a little trickier than you might expect and for full control you need to master the Edit Axis box. I will blog that separately.

Conclusion

Those were my design choices in this case. Was I successful? Let me know. Remember: none of these are mandatory changes and I don’t even suspect everyone would agree these are improvements to the originals – it’s partly subjective and partly depends on the goal of your viz.

My entry - click to see it bigger
My entry – click to see the interactive version

Are our defaults at fault?

Here are two dashboards. The bottom one uses all Tableau’s default formatting settings. The top one has at least 25 formatting changes or design decisions: these changes take a few hours to implement. Why bother? What’s wrong with Tableau’s default formatting?

My entry - click to see it bigger
At least 30 design choices were made to make this!  – click to see it bigger
100% default formatting
The same dashboard with zero formatting changes: it’s 100% Tableau default

The short answer is: nothing. The longer answer is more nuanced.

It’s Tableau Public’s Design Month so I wanted to do a series of related posts. In these posts, I’ll be focusing on the dashboard above (click here for bigger version). This was my entry into Tableau’s annual internal “VizWhiz” competition. In this round, we were given data was about US road traffic accidents.

There are at least 25 things design decisions I’ve made to produce that viz. That’s 25  changes I have made to the default Tableau formatting: some small, some large.

But first: why change the default formatting? What’s wrong with Tableau’s defaults?

Let’s look again at the default dashboard:

100% default formatting
100% default formatting

Let me repeat: There is nothing inherently wrong with Tableau’s defaults.

My story can be understood from the default dashboard above. In fact, I am sure some people reading this will think the defaults are better than my design. If so, let me know in the comments below.

So why bother? Why would I spend hours tweaking what is already a perfectly-fine dashboard?

Chris Hoy (Image: BBC)

I take my inspiration from ex-British Cycling performance director Dave Brailsford. He led the British Cycling team to huge success through his “marginal gains” (click here to find out more). The principle is that you make all the small and large changes you make. Even the small changes, when aggregated, make a difference.

Each formatting tweak might only improve my viz a tiny bit.

The default formatting gives you a bronze-medal dashboard. There’s no shame in getting a bronze medal for something. If you’re in a business environment, producing dashboards for fast, iterative consumption, it is perfectly fine to leave the defaults as they are.

However, what if you want the Gold medal? In this case, you make all the changes you can. Even if they are small, the aggregate effect is significant. For that reason, I am happy to go the distance and make grab every “marginal gain” that I can.

Over the next month, I’ll be describing most of the formatting and design decisions I made.

Humblebrag alert: I am pleased with my dashboard but am wide open to criticisms about it. I am sure that what I think are good decisions might well seem like bad ones to you)

 

Dual axes: nice formatting

You’ve built a nice chart using synchronised dual axes (maybe it’s a lollipop chart – as described in my previous posts!). It looks great, but you’re just left with a niggling little design flaw: those dual axis sure take up a lot of space, at the top and the bottom of your viz:

What can we do about this? The first thing I thought of was to format all the Tick Marks and Titles away from the top axis:

That’s no good – there’s a huge useless white banner of dead space at the top of the chart now.

Instead, why not just format each axis to show one of the important parts: one to show the title and one to show the tick marks? This is the end result:

Now I have the best of both worlds – the user’s not aware of any dead space, and nothing gets repeated. To format the axis, right-click anywhere on the axis on the worksheet and choose Edit axis…

On the top axis, leave the Title as it is, and show just the Minor tick marks, making sure they are the same interval as the Major tick marks on the bottom axis:

:

On the bottom axis, leave the tick marks, and delete the Title:

Job done! You’ve maximised your available space and made your users’ lives a bit easier.

Lollipop charts: the search for the perfect mark (part one)

Here’s the problem: I am visualising satisfaction rates over multiple dimensions. In almost all cases, satisfaction rates are high (between 70% and 100%). I want a visualisation that allows comparison over multiple dimensions that is also nice on the eye. Below is the result: a lollipop chart. Although I stumbled across this design by trial and error in Tableau, it is a chart type found elsewhere, eg on Chandoo’s excellent Excel blog. What I thought I would do in this post is explain why I think it’s a great chart in this situation and how to do it in Tableau. Note: in this post, I’m using the Superstore data, not my real dataset. In my next post, I’ll explain how to build a lollipop in Tableau. If you can’t wait that long, you could try it yourself as your homework 🙂


To me, it’s a great way to reduce the data-ink ratio while retaining readability. What do you think? Here’s how I arrived at this design.

Tableau’s default visualisation is the bar. What’s the problem with this? Well, when the bars are all very long (as is the case with my data), there’s just too much ink, and it creates an unpleasant Moire effect:

How can we solve this? Well, we can reduce the bars to wafer thin ones, but this looks, well, flakey:

Maybe we should push the size slider to the max (and add a border). This is what I would normally do in this situation. It removes the Moire effect, and isn’t too bad, but boy, there’s now a lot of ink being used:

Given there’s too much ink, maybe the bar itself is the problem. So how does a circle work? Well, the problem is that the circle is a long long way away from the label. When we try and foist this kind of thing on our users, they tell us it’s too hard to relate the circle to the name, even using shaded lines:

We can get round this distance problem in a couple of ways. One is to fix the axis so that it’s range is only as wide as the min/max values:

But we all know that an axis that doesn’t start at zero is a bad thing, right? Well, sometimes it isn’t a bad thing, but it sure makes the states at the bottom of the list look like poor performers, even though they’re actually only 0.6% lower than the top of the list. Best in this case to keep the axis starting at zero. Maybe we could label the circle directly instead:

This still isn’t right: all that white space at the left of the chart seems wrong.

And this was when I had my brainwave. Thick bars are no good and lonely circles are no good. How about making a combination of them both? And that’s how I came up with a lollipop.I think it has the following benefits:

  1. Can be used when all dimension members have high values (i.e. long/tall bars in a bar chart)
  2. Greatly reduces the data-ink ratio while maintaining a clear link to axis labels
  3. All the users I’ve shown it to so far have really engaged with it – they think it’s both pretty and easy to read

I also like the fact that it works if you add more dimensions to make small multiples:

Next time we’ll look at how to build it in Tableau. In the meantime, let me know your thoughts.