About
RGraph is a JavaScript charts library based on HTML5 SVG and canvas. RGraph is mature (over 15 years old) and has a wealth of features making it an ideal choice to show charts on your website.

More »

 

License
RGraph can be used for free under the GPL or if that doesn't suit your situation there's an inexpensive (£99) commercial license available.

More »

 

Download
Get the latest version of RGraph (version 6.17) from the download page. There's also older versions available, minified files and links to cdnjs.com hosted libraries.

More »

A "Who wants to be a millionaire?" style Bar chart

[No canvas support]

This is an example of a Bar chart that has been customised to have an appearance similar to the "Who wants to be a millionaire?" "Ask the audience" results Bar chart. It uses the draw event in conjunction with the api to draw the text above the bars. The background gradient is done with a css linear gradient - it's not drawn on the canvas. The background grid is customised in linewidth and colors, the axes are disabled and the text color is customised too.

The css gradient that's used in the canvas tag's style attribute is a straightforward linear gradient but achieves a nice effect for the background of the chart. The relevant css is this:

background-image: linear-gradient(45deg, black, blue, black);

It's made up of three parts - an angle for the gradient (which in this case is 45 degrees) and the colors that the gradient uses. There's a whole HOWTO document about css gradients here that shows you the various options that are available to you.

There's also an svg version of this chart in the download archive.

This goes in the documents header:
<script src="RGraph.common.core.js"></script>
<script src="RGraph.bar.js"></script>
Put this where you want the chart to show up:
<canvas id="cvs" width="300" height="250" style="border-radius: 6px; background-image: linear-gradient(45deg, black, blue, black); box-shadow: #aaa 2px 2px 2px; float: right">[No canvas support]</canvas>
This is the code that generates the chart - it should be placed AFTER the canvas tag(s):
<script>    
    // These are the labels that are placed above the Bar chart
    labels = [50,20,15,15];
    
    // Copy the labels and create the data out of them
    data   = RGraph.arrayClone(labels);

    // Create the Bar chart
    bar = new RGraph.Bar({
        id: 'cvs',
        data: data,
        options: {
            
            // Note that the background of the canvas tag is a CSS gradient
            // as well as these configuration properties.
            backgroundGridAlign: false,
            backgroundGridVlinesCount: 8,
            backgroundGridHlinesCount: 10,
            backgroundGridColor: '#6A93CA',
            backgroundGridLinewidth: 3,
            
            // A pink gradient for the bar colors
            colors:['Gradient(#EC06D8:#FEB2FB:#FEB2FB)'],

            yaxisScaleMax: 100,
            marginLeft: 10,
            marginRight: 10,
            marginTop: 30,
            marginBottom: 45,
            yaxisScale: false,
            xaxisLabels: ['A','B','C','D'],
            xaxisLabelsColor: 'yellow',
            xaxis: false,
            yaxis: false,
            textSize: 22,
            textColor: 'rgba(0,0,0,0)',
            textFont: 'Verdana',
            colorsStroke: 'rgba(0,0,0,0)'
        }
    // Use the grow() effect and add a draw event listener
    }).grow().on('draw', function ()
    {
        // Add the labels that are positioned in the top margin. The
        // labelsAbove option places the text just above each bar and
        // we want all the labels in the top margin. Therefore a little
        // custom text is required.
        for (var i=0; i<4; i++) {
            RGraph.text({
                object: bar,
                text:   labels[i] + '%',
                x:      bar.coords[i][0] + (bar.coords[i][2] / 2),
                y:      30,
                color:  'white',
                size:   18,
                halign: 'center',
                font:   'Verdana'
            });
        }
    });
</script>