Dynamically choose a chart type

Ujval Gandhi commented on my post about dual axis formatting. He asked if you could use dual axes/parameters to choose between showing a bar and a line chart. Turns out that, yes, you can:

It’s quite a simple trick:

1. Create a Boolean parameter. I called my “Bar or Line”

2. For each measure you are displaying, create 2 calculated fields: one for the bar and one for the line. Here’s the Sales field for the bar:

3. Drop both calculated fields onto the Rows shelf, choose Dual Axes, and Synchronise them.

4. Change the Marks card to show Multiple Mark Types:

5. Set one mark to Bar and one to Line

6. Show the parameter control.

You’re done!

This is quite a nice trick, but I’m not sure why you’d want to do it. I can’t see a way it could be extended to cover other functionality. There are other ways to allow users to show multiple chart types; for example, Alan Smithee has an excellent example of this here. It’s possible that with lots of parameters and calculated fields, you could give the end user more control over what they show.

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.