What I've done
I've added Google chart to the head of my page. This returns an image of a chart.
What I need to do
I simply need to add a second chart to the same page.
The problem
The code for the second chart is ignored. I largely suspect this is due to me incorrectly combining the code for each chart.
The code
First chart (line):
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Month');
data.addColumn('number', 'Apples');
data.addColumn('number', 'Oranges');
data.addRows([
['Oct 11', 20, 0],
['Nov 11', 0, 0],
['Dec 12', 0, 20],
['Jan 12', 0, 10],
['Feb 12', 0, 10],
['March 12', 10, 10]
]);
// Set chart options
var options = {'width':960,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.LineChart(document.getElementById('line_chart'));
chart.draw(data, options);
}
</script>
Second chart (pie):
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
['Zucchini', 1],
['Pepperoni', 2]
]);
// Set chart options
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
Each of the charts are called in the body using a container div with a unique id:
<div id="chart_div"></div>
My question
How do I stitch these two blocks of code together? I've tried copying drawChart() and specifying unique function names and variables but to no avail.
maybe when you specify
twice it overwrites the callback event for the first time?
Just a guess...
Basically you can wrap function
drawChart
for parameters to pass on like:and
as many times as much you want to render graphs:
Production version of Google Charts has a timing bug that prevents more than one chart from loading on the same page.
Google fixed this in a recent release, available with the frozen version loader: https://developers.google.com/chart/interactive/docs/library_loading_enhancements#frozen-versions
Relevant thread: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/google-visualization-api/KulpuT418cg/yZieM8buCQAJ
step_1.(change id curve_chart to some another name(eg.ajay))
step_2.(assign this id to your chart in script element)..
Based on @Dominor's answer, but if you are registering your charts from arbitrary, just build a function stack that gets executed in the callback function like so:
Then, somewhere else in your template, you can push to this stack. In my example, I was iterating through some template snippet.