Holiday Goodies - Google Chart API Challenge Charts Explained Part 1
Wednesday, December 19th, 2007Ok, so about ten days ago I challenged my readers to solve the following charting problems with the Google API - Bullet Chart, Sparkline and Square Pie. I provided a sample bullet chart but asked if anyone could improve upon it. Unfortunately, only one brave soul, Jeff Donnici, took up the challenge and provided two solutions for Sparklines.
I am inviting Jeff to write his own discourse on how to create sparklines with the Google API, so Jeff, please email me (my email is at the bottom of the right-hand nav) with your description of how to create the sparklines.
First, let’s cover some basics of the API.
The API is pretty simple, it’s just a URL with a bunch of query parameters attached to define the chart and its elements. It can also be a bit annoying when you’re encoding the data sets and their associated information. My guess would be that to really get the power out of the API you would want some sort of programmatic interface to it as building the chart request ‘by hand’ can be laborious.
So, components that are used in these examples:
- Base API URL: http://chart.apis.google.com/chart?
- Required Elements
- Chart Type Parameter: cht - Allowable Chart Types
- Chart Size: chs - Chart Size in pixels [w]x[h] (chs=250×250)
- Chart Data: chd - Chart data encoding methods (simple, text, extended)
- Optional Elements Used
- Chart Title: chtt - Text Title for the Chart
- Chart Title Text Size: chts - Title font size and color
- Bar Chart Height: chbh - Bar width
- Chart Colors: chco - data series colors
- Chart Background Fill: chf - Chart fill options
For me, let’s start with the Bullet Chart. The stumbling blocks here are that
- The Google Chart API does not support combination charts, or at least not a bar chart / scatter plot combo, which is how I create Bullet Charts in Excel.
- The API does not seem to support single data point properties. In other words, I can set the color and width properties for the stack (e.g. series) but not for data points in the stack.
If you remember the Excel example of the Bullet chart, you will recall that we have 3 data series (top, middle, bottom) each with 4 data points to create the basic visualization of the Bullet chart. We then combine into that chart a scatter plot to create the target line. Well this API doesn’t support coloring for a single data point (which is required in the Excel solution) so what does Google offer as a replacement? Well, with the background fill, we can go a linear stripe that will take up some percentage of the chart space - ok, I think I can work with that:
But first things first. Let’s define the chart type:
http://chart.apis.google.com/chart?cht=bhs
- cht=bhs tells Google that we are working with a horizontal bar chart
Next, let’s set the chart size
http://chart.apis.google.com/chart?cht=bhs&chs=250×40
- Remember, chs wants [width]x[height] in pixels and it’s required
While we’re at it, lets go ahead and set the bar width (or height if you prefer)
http://chart.apis.google.com/chart?cht=bhs&chs=250×40&chbh=10,25
- chbh lets us define that bar width and optionally the spacing between bars. In this example the gap is set to 25 to make sure that the chart fill area shows up around the bar itself.
Ok, for the last of the easy bits, let’s go ahead and set the Chart title
http://chart.apis.google.com/chart?cht=bhs&chs=250×40&chbh=10,25&chtt=Homepage+Retention+Rate:+90%
- Note the plus (+) symbols in the Chart Title text, this tells the API to use a blank space when creating the title
On to the data. As noted above, there are 3 options for encoding data - simple, text, and extended. I haven’t really figured out why you would use simple because it’s basically a substitution scheme that feels more annoying than anything. However, in this example we are using text encoding because it allows us to use regular numbers with up to 1/10th precision.
http://chart.apis.google.com/chart?cht=bhs&chs=250×40&chbh=10,25&chtt=Homepage+Retention+Rate:+90%&chd=t:90.0
- when adding the chart data, you must first tell chd how you are encoding the data (chd=t) and then supply the data itself (:90.0)
The above gives us a basic bar chart:
Now we need to add the elements that will make this look like a Bullet chart and we’re going to get it all done with chart fill!
http://chart.apis.google.com/chart?cht=bhs&chs=250×40&chbh=10,25&chtt=Homepage+Retention+Rate:+90%&chd=t:90.0&chf=c,ls,0,000000,0.50,cccccc,0.25,000000,0.005,efefef,0.245
chf (chart fill) takes the following arguments:
- fill area: background (bg) or chart area (c), in the Bullet chart, we use the chart fill method
- fill type: solid (s), linear gradient (lg), and linear stripes (ls)
- angle: angle of the stripe between 0 (horizontal) and 90 (vertical)
- stripe color and width pairs: color hex value and length expressed as a percentage
If you look at the URL snippet above in bold, you will see that we have defined
- the background element as "chart fill" (c)
- the fill type as "linear stripe" (ls)
- the "angle" as zero
- The first section is black and extends to 25% of the length
- The second fill section is the same as the first
- the third section is also 25% but is a dark gray
- the fourth section, only 1/2 of 1 percent in width is black - It’s a trick, this is the target line!
- The last section is 24 & 1/2 percent of the length and is a very light gray
That’s it, now we have a functioning bullet chart
I sure wish that I could remove the axes lines, and add data labels to the bar and target line, but oh well.
Ok, I need to take a break as this is quite a long post. In part 2, we will walk through the pie chart solution (which is not that great),






