using checkboxes would probably be easier...
var data;
var colors = ['red', 'blue', 'green'];
$scope.$watch('datax', function(newValue, oldValue) {
data = google.visualization.arrayToDataTable($scope.datax);
colors.forEach(function (color, index) {
data.setColumnProperty(index + 1, 'color', color);
});
drawChart();
}, true);
$scope.toggleCol = function() {
drawChart();
}
function drawChart() {
var chartColors = [];
var chartColumns = [0];
var view = new google.visualization.DataView(data);
var checks = document.getElementsByTagName('input');
for (var i = 0; i < checks.length; i++) {
var seriesColumn = parseInt(checks[i].value);
if (checks[i].checked) {
chartColumns.push(seriesColumn);
chartColors.push(data.getColumnProperty(seriesColumn, 'color'));
}
}
view.setColumns(chartColumns);
options.colors = chartColors;
chart.draw(view, options);
}
see forked fiddle
EDIT
use a DataView to convert the value columns from string to number...
var data;
var dataView;
$scope.$watch('datax', function(newValue, oldValue) {
data = google.visualization.arrayToDataTable($scope.datax);
dataView = new google.visualization.DataView(data);
// convert string columns to number
var viewColumns = [0];
$.each(new Array(data.getNumberOfColumns()), function (colIndex) {
// skip first column
if (colIndex === 0) {
return;
}
viewColumns.push({
calc: function (dt, row) {
return parseInt(dt.getValue(row, colIndex));
},
label: data.getColumnLabel(colIndex),
type: data.getColumnType(colIndex)
});
});
dataView.setColumns(viewColumns);
drawChart();
}, true);
then use the new dataView
to finish drawing...
function drawChart() {
var chartColors = [];
var chartColumns = [0];
// use dataView here
var view = new google.visualization.DataView(dataView);
...