Opzione A: creare pulsanti
possibile rendere un pulsante (o utilizzando il tag, o, ecc) che corre javascript per filtrare i dati. Ciò significa che è possibile creare tre pulsanti (o 3 caselle di selezione radio, o due caselle di controllo e un pulsante, o qualsiasi altra cosa) che eseguirà javascript quando selezionato.
Tale javascript deve contenere una funzione che filtrerà i dati (probabilmente utilizzando un DataView Class con SetColumns) per contenere le colonne appropriate per la selezione. Ci sono un migliaio di modi per fare questo, e dato che stai usando alcuni dati generici e la tua vera applicazione è probabilmente diversa, ti permetterò di capire cosa funziona meglio per i tuoi dati/utenti.
Opzione B: Usa Google visualizzazione Controlli
Si può anche fare lo stesso utilizzando la visualizzazione di Google Category Filter Control con un po 'di regolazione. C'è un grande esempio di asgallant here, con una spiegazione here. Ciò richiede una tabella intermedia, ma funziona bene se ti piace come appare/funziona il filtro della categoria. Dipende tutto da te!
Dal momento che il sito mi vuole mettere il codice inline, qui sono:
google.load('visualization', '1', {packages: ['controls']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Year');
data.addColumn('number', 'Foo');
data.addColumn('number', 'Bar');
data.addColumn('number', 'Baz');
data.addColumn('number', 'Cad');
data.addRows([
['2005', 45, 60, 89, 100],
['2006', 155, 50, 79, 24],
['2007', 35, 31, 140, 53],
['2008', 105, 23, 43, 82],
['2009', 120, 56, 21, 67],
['2010', 65, 19, 34, 134],
['2011', 80, 23, 130, 40],
['2012', 70, 140, 83, 90]
]);
var columnsTable = new google.visualization.DataTable();
columnsTable.addColumn('number', 'colIndex');
columnsTable.addColumn('string', 'colLabel');
var initState= {selectedValues: []};
// put the columns into this data table (skip column 0)
for (var i = 1; i < data.getNumberOfColumns(); i++) {
columnsTable.addRow([i, data.getColumnLabel(i)]);
initState.selectedValues.push(data.getColumnLabel(i));
}
var chart = new google.visualization.ChartWrapper({
chartType: 'BarChart',
containerId: 'chart_div',
dataTable: data,
options: {
title: 'Foobar',
width: 600,
height: 400
}
});
chart.draw();
var columnFilter = new google.visualization.ControlWrapper({
controlType: 'CategoryFilter',
containerId: 'colFilter_div',
dataTable: columnsTable,
options: {
filterColumnLabel: 'colLabel',
ui: {
label: 'Columns',
allowTyping: false,
allowMultiple: true,
selectedValuesLayout: 'belowStacked'
}
},
state: initState
});
google.visualization.events.addListener(columnFilter, 'statechange', function() {
var state = columnFilter.getState();
var row;
var columnIndices = [0];
for (var i = 0; i < state.selectedValues.length; i++) {
row = columnsTable.getFilteredRows([{column: 1, value: state.selectedValues[i]}])[0];
columnIndices.push(columnsTable.getValue(row, 0));
}
// sort the indices into their original order
columnIndices.sort(function (a, b) {
return (a - b);
});
chart.setView({columns: columnIndices});
chart.draw();
});
columnFilter.draw();
}
Se la risposta di seguito ha lavorato per voi, si prega di fare clic sul segno di spunta sotto le frecce su/giù-voto nella risposta così che altre persone possano vedere che questo ha risolto il tuo problema. Se la mia risposta non è stata sufficientemente chiara, o se si riscontrano ancora problemi, si prega di aggiungere un commento alla risposta che spiega quale sia il problema/cosa non è chiaro. – jmac