Wariant A: Upewnij Przyciski
Można zrobić przycisk (przy użyciu znacznika, albo, etc.), który uruchamia skrypt do filtrowania danych. Oznacza to, że możesz utworzyć trzy przyciski (lub 3 pola wyboru radioodbiornika lub dwa pola wyboru i przycisk, lub cokolwiek innego), które będą uruchamiały javascript po zaznaczeniu.
Ten javascript powinien zawierać funkcję, która będzie filtrować twoje dane (prawdopodobnie używając DataView Class z SetColumns), aby zawierały właściwe kolumny dla twojego wyboru. Istnieją tryliony sposobów na zrobienie tego, a ponieważ używasz pewnych ogólnych danych, a twoja prawdziwa aplikacja jest prawdopodobnie inna, pozwolę ci dowiedzieć się, co działa najlepiej dla twoich danych/użytkowników.
Wariant B: Użyj Google Wizualizacja Kontroluje
Można również zrobić to samo za pomocą wizualizacji Google Category Filter Control z odrobiną regulacji. Doskonały przykład można znaleźć pod adresem here z wyjaśnieniem: here. Wymaga to tabeli pośredniej, ale działa dobrze, jeśli podoba Ci się wygląd/działanie filtra kategorii. Wszystko zależy od Ciebie!
Ponieważ strona chce mnie postawić inline kodu, tutaj jesteś:
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();
}
Jeśli odpowiedź poniżej pracował dla was, proszę kliknąć zaznaczenie poniżej strzałek w górę/w dół głosować w odpowiedzi tak inni ludzie widzą, że to rozwiązało twój problem. Jeśli moja odpowiedź nie była wystarczająco jasna lub nadal występują problemy, dodaj komentarz do odpowiedzi wyjaśniający, czym jest ten problem/co nie jest jasne. – jmac