I need to create multiple Chart Gauges with values max
and min
variables. The solution I found is to insert the values at table
and within a script go through the table
to get the values. The drawings appear well except for the values max
and min
of each gauge
. If I have more than one gauge, the value max
and min
of all gauges is the value max
and min
of the "last record". What am I doing wrong?
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<table id="myTable">
<tr>
<th>
ID
</th>
<th>
Name
</th>
<th>
Value
</th>
<th>
Value Min
</th>
<th>
Value Max
</th>
</tr>
<tr>
<td id="ID">1</td>
<td id="gauge">gauge1</td>
<td id="value">20</td>
<td id="min">0</td>
<td id="max">40</td>
</tr>
<tr>
<td id="ID">2</td>
<td id="gauge">gauge2</td>
<td id="value">800000</td>
<td id="min">500000</td>
<td id="max">1000000</td>
</tr>
<tr>
<td id="ID">3</td>
<td id="gauge">gauge3</td>
<td id="value">25</td>
<td id="min">10</td>
<td id="max">30</td>
</tr>
</table>
<table>
<tr>
<td>
<div id="chartID" style="width:400px"></div>
</td>
</tr>
</table>
<script>
google.charts.load('current', { 'packages': ['gauge'] });
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Name');
data.addColumn('number', 'value');
//gets table
var oTable = document.getElementById('myTable');
//gets rows of table
var rowLength = oTable.rows.length;
for (i = 1; i < rowLength; i++) {
//gets cells of current row
var oCells = oTable.rows.item(i).cells;
var ID = parseFloat(oCells.item(0).innerHTML);
var chartID = 'chart_div_' + ID;
var cellName = String(oCells.item(1).innerHTML);
var cellValue = parseInt(oCells.item(2).innerHTML);
var cellValMin = parseFloat(oCells.item(3).innerHTML);
var cellValMax = parseFloat(oCells.item(4).innerHTML);
//calculate major tick increments
var increment = (parseFloat(cellValMax) - parseFloat(cellValMin)) / 4;
var tick0 = cellValMin;
var tick1 = parseFloat(cellValMin) + parseFloat(increment);
var tick2 = parseFloat(tick1) + parseFloat(increment);
var tick3 = parseFloat(tick2) + parseFloat(increment);
var tick4 = cellValMax;
var Ticks = [tick0, tick1, tick2, tick3, tick4];
data.addRows([
[cellName, cellValue]
]);
var options = {
width: 400, height: 460,
greenFrom: tick3, greenTo: cellValMax,
yellowFrom: tick1, yellowTo: tick3,
redFrom: cellValMin, redTo: tick1,
minorTicks: cellValMin,
majorTicks: Ticks,
max: cellValMax,
min: cellValMin
};
var chart = new google.visualization.Gauge(document.getElementById('chartID'));
chart.draw(data, options);
}
}
</script>
The example shows how the gauges take the value max
and min
of the last record. It takes a while to draw the gauges. Thanks