Who invented the lollipop chart?

Lollipop graph (WolframMathworld)

Last week, Stephen Few critiqued lollipop charts and I wrote a post in their defense, in which I claimed I coined the term “lollipop chart” when I first wrote about them in 2011.

Stephen Few claims he’d seen them several times before I made them in Tableau. I accept that’s entirely reasonable. I remember at the time I thought my idea was original, and if I’d seen them prior to my post, I hadn’t consciously registered them.

Stephen also sent me a link to the lollipop graph, on Wolprham Mathworld. One of his readers had googled the term lollipop chart back when I wrote my post. The purpose of the lollipop graph is different to that of the lollipop chart, but coining cutesy names is certainly not something exclusive to me (tadpole or barbell graph, anyone?

Which all renders my claim to inventing them hanging on by a thread! I probably wasn’t the first to make a lollipop chart. I wasn’t the first to come up with a cute name. Maybe, just maybe, I can claim the ever-shrinking privilege of coining the lollipop chart!

Lollipop charts, revisited

Easy on the eye

Stephen Few has written about lollipop charts in his latest blog. “Malformed bar graphs,” he calls them. The poor things – lollipops are more than that.

The problem is, he didn’t consider the problem I was trying to solve when I first created them in 2011*:

Problem: A bar chart with many bars of a long length are unpleasant to look at.

My eyes! They hurt!

I believe lollipops create a visual experience which is easier to look at. In his post, Steve used an example using 7 bars with a large range. I didn’t create the lollipop for that situation. While I believe a bar or lollipop works for that kind of data, criticizing the lollipop without addressing the original intention is disingenuous. I did consider fat bars and thin lines, too, in seeking a solution. Fat bars are just too inky, and the thin lines don’t have enough definition. Lollipops are an attractive compromise to solve the problem.

*Did I invent lollipop charts? Alberto Cairo credited me with their invention in his book The Truthful Art, and I’m not going to argue against that! The images on my original post are no longer available, unfortunately.

 

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.