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.

Lollipops and page history

In my original Lollipop Chart post, Austin Dahl commented that lollipops are a way of adding page history to a bar-type display. When I tried this in v6.0.2 it crashed my workbook. However, I’ve upgraded to 6.0.5 and it now works. At least, it works in that it doesn’t crash Tableau. Below is a snapshot of my lollipop chart with a page history on Month/Year of Order Date.

And below is David Catley’s implementation using Corruption data:

What do you think? On my example, I think it adds too much noise. However, on David’s, if you scroll to the most recent year, the reduction in the Corruption Index in Italy is very clear. I’ll soon be showing another way you can show historical data more effectively on a ranked bar-style chart.

Lollipop charts: part two

In my previous post, I explained how I stumbled across the lollipop chart as a way of displaying data when the values are all very high. This post reveals how I did it. Those of you who are savvy with the new features in v6 will probably have immediately guessed it was using dual axes. Here’s what my lollipop chart looks like:

What’s the trick? It revolves around duplicating your measure on the columns shelf, as follows:

You need to make sure it’s dual axis. Right-click on the second Measure pill and choose “Dual Axis” to draw each AVG(Satisfaction) on the same pane. Then right-click on one of the axes and choose “Synchronise axis” to make sure they match completely. This step is important because if you add labels to one of the measures, Tableau might stretch one axis to fit the text of the label in.

The next step is to define multiple marks. This feature might be new to you, and doesn’t exactly jump out at you in the user interface. Click on the little drop-down arrow at the right of the Marks shelf and choose “Multiple Mark Types”:

The Mark shelf now has a new row: it will say “All” and have left/right arrows. With the multiple mark feature, you can format all measures at once, or each one individually. What we need to do is set one mark to be a bar (a very thin one) and the other to be a circle, as shown below:

In my example, I have also added colour to emphasise the Customer Segment dimension. You’ll see that each Mark uses a different Dimension. While experimenting with the lollipops, I discovered that if the connecting line is the same intensity as the circle, it overwhelms the circle. By using a lighter palette on the line, things look nicer. I achieved this by duplicating the Dimension, and assigning lighter colours of the same hue to its members.

To label the min/max I turned on labels for just the Circle mark.

That’s about all you need to do. I added some shading and subtle row divider lines to highlight the different states. Finally, I formatted the axes so they were pretty much hidden.

I’ve started using this technique regularly as it engages users, and improves the data-ink ratio without sacrificing interpretation. What do you think?

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.





The joy of six: easy error bars

Over on the forum, Hadbar asked a question about Error Bars. He asked the question back in the days of version 5, when it wasn’t straightforward to make a pleasant error bar. However, now we have the Joy of Six, we can use the new dual axis/multiple mark features to create some visually appealing error bars:

Tableau won’t calculate the error values for you, so you need those in your dataset. With this example, you need two measures:

  • Error – the magnitude of the error
  • Error lower – the lower limit of the error bar

Here’s how we build the viz. First make a regular bar chart with the relevant Dimension and Measure, as below:

To create the error bar, we build a Gantt chart on the second axis. It’s lower limit is the value of the Error lower measure, and it’s size (height) is the size of the error. Step one is to put the MIN(Error Lower) pill on the Rows shelf, and set it to use Dual Axis (click the picture to see details):

We’ve now got a dual axis graph, but there’s some way to go yet. The Error Bars need to use a different mark type, in this case a Gantt Bar. Right-click on the axis, and choose Mark Type…Gantt Bar:

Set the Size of the Gantt Bar to the size of the error. To do this, make sure the Marks shelf is showing the correct Mark. In this case, it’s MIN(Error Lower). This is a new feature in v6. In case you’ve not seen it, you can page through all the Marks:

Once you have found the correct mark, put the Error measure onto the Size shelf – that creates the Gantt bar with the height of the error. You’ll probably now notice that you have error bars, but they’re wide, and not in the right position relative to the bar. This fat bar problem is easily fixed – just slide the Size slider on the Mark shelf to be the smallest possible. That creates a nice thin line.

How to get the error bars to align correctly? Simple – right-click on the axis and choose Synchronise Axis. While you’re there, you don’t need to show the right-hand axis at all. You can’t properly hide axes in Tableau, but you can format them so they don’t appear. Right-click on the axis and choose Edit axis. Delete the title on the General tab, and in the Tick Marks tab, set the Minor and Major Tick Marks to None. Click OK and your axis has “disappeared”.

Lo and behold – you have some error bars. Play around with widths/colours and other settings to make it appear just how you want it. Coming next in the Joy Of Six series…. using parameters to create dynamic groups.