2016-12-14 4 views
1

Ну я новичок в Google картах, IAM игры с категорией фильтра для while.but я havn't был в состоянии сделать его работу, как мне нравитсяКак настроить категорию фильтра в диаграммах Google

var data = new google.visualization.DataTable(); 
    data.addColumn("string", "Date"); 
    data.addColumn("number", "Retailer 1"); 
    data.addColumn("number", "Retailer 3"); 
    data.addColumn("number", "Retailer 2"); 

    data.addRows([ 
     ["01/12", 160, {v: 208, f: '208'},{v: 320, f: '320'}], 
     ["02/12", 570, {v: 741, f: '741'},{v: 1140, f: '1140'}], 
     ["03/12", 385, {v: 497, f: '497'},{v: 770, f: '770'}], 
     ["04/12", 328, {v: 425, f: '425'},{v: 656, f: '656'}], 
     ["05/12", 445, {v: 577, f: '577'},{v: 890, f: '890'}], 
     ["06/12", 406, {v: 525, f: '525'},{v: 812, f: '812'}], 
     ["07/12", 249, {v: 475, f: '475'},{v: 772, f: '772'}], 

    ]); 

    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)]); 


    } 
    // you can set individual columns to be the default columns (instead of populating via the loop above) like this: 
    // initState.selectedValues.push(data.getColumnLabel(4)); 

    var chart = new google.visualization.ChartWrapper({ 
     chartType: 'ColumnChart', 
     containerId: 'chart_div', 
     dataTable: data, 
     options: { 
      width: 420, 
      height: 200, 
      isStacked: true , 
      title:'Sum Of Quant Column Labels By Retailers', 
      colors:['#3366cc','#FF5733','#808080'], 
      bar: {groupWidth:'40%'}, 
      chartArea:{left:32,width:'70%'}, 
     } 
    }); 

    var columnFilter = new google.visualization.ControlWrapper({ 
     controlType: 'CategoryFilter', 
     containerId: 'colFilter_div', 
     dataTable: columnsTable, 
     options: { 
      filterColumnLabel: 'colLabel', 
      filterColumnIndex: 1, 
      useFormattedValue: true, 
      ui: { 

       label: 'Retailers', 
       allowTyping: false, 
       allowMultiple: false, 
       caption : 'All Retailers', 
       allowNone: true, 
       selectedValuesLayout: 'belowStacked' 
      } 
     }, 
     state: initState 
    }); 

    function setChartView() { 
     var state = columnFilter.getState(); 
     var row; 
     var view = { 
      columns: [0] 
     }; 
     for (var i = 0; i < state.selectedValues.length; i++) { 
      row = columnsTable.getFilteredRows([{column: 1, value: state.selectedValues[i]}])[0]; 
      view.columns.push(columnsTable.getValue(row, 0)); 
     } 
     // sort the indices into their original order 
     view.columns.sort(function (a, b) { 
      return (a - b); 
     }); 
     chart.setView(view); 
     chart.draw(); 
    } 
    google.visualization.events.addListener(columnFilter, 'statechange', setChartView); 

    setChartView(); 
    columnFilter.draw(); 

Вот мой код, что происходит прямо сейчас, я не могу сделать выбор для выбора всех данных за один раз, я добавляю заголовок для «Все розничные продавцы», но это просто подпись больше ничего, Когда я выберите «Все розничные продавцы», графики не изменяются.

Все, что я хочу, это когда я выбираю «Все розничные продавцы», все розничные продавцы показаны на диаграмме. Любая помощь сделает мир полезной для меня.

Спасибо, Анкит Rauthan

+0

с использованием опции 'allowNone: true' должен отображать все данные, когда в фильтре ничего не выбрано - по умолчанию не выбрано значение _select all_ – WhiteHat

+0

@WhiteHat прежде всего спасибо помощнику за получение интерселя, ну я уже написал свой код выше .allowNone уже прав, но когда я его выбираю, он показывает «Недостаточно столбцов, чтобы рисовать запрошенный график». Не знаете, что на самом деле проблема. –

+0

Я имею в виду, когда я не выбираю какой-либо вариант, он показывает «Недостаточно столбцов для рисования запрошенной диаграммы». Я просто не могу понять, в чем проблема: –

ответ

0

поскольку фильтр используется, чтобы выбрать столбцы, которые будут отображаться,
, когда ничего не выбрано, только один столбец [0] передается view
, который вызывает ошибку на не картировать
гистограмм нужно по крайней мере два столбца, который можно сделать ...


проблема начинается здесь, если ничего не выбрано, никаких дополнительных столбцов добавляются в view ...

var view = { 
    columns: [0] 
}; 
for (var i = 0; i < state.selectedValues.length; i++) { 
    row = columnsTable.getFilteredRows([{column: 1, value: state.selectedValues[i]}])[0]; 
    view.columns.push(columnsTable.getValue(row, 0)); 
} 

для устранения проблемы, удалите view, когда ничего не выбрано,
это вызовет диаграмму, чтобы отобразить все столбцы ...

if (state.selectedValues.length > 0) { 
    chart.setView(view); 
} else { 
    chart.setView(null); 
} 

см следующий рабочий фрагмент кода ...

google.charts.load('current', { 
 
    callback: drawChart, 
 
    packages: ['controls', 'corechart'] 
 
}); 
 

 
function drawChart() { 
 
var data = new google.visualization.DataTable(); 
 
    data.addColumn("string", "Date"); 
 
    data.addColumn("number", "Retailer 1"); 
 
    data.addColumn("number", "Retailer 3"); 
 
    data.addColumn("number", "Retailer 2"); 
 

 
    data.addRows([ 
 
     ["01/12", 160, {v: 208, f: '208'},{v: 320, f: '320'}], 
 
     ["02/12", 570, {v: 741, f: '741'},{v: 1140, f: '1140'}], 
 
     ["03/12", 385, {v: 497, f: '497'},{v: 770, f: '770'}], 
 
     ["04/12", 328, {v: 425, f: '425'},{v: 656, f: '656'}], 
 
     ["05/12", 445, {v: 577, f: '577'},{v: 890, f: '890'}], 
 
     ["06/12", 406, {v: 525, f: '525'},{v: 812, f: '812'}], 
 
     ["07/12", 249, {v: 475, f: '475'},{v: 772, f: '772'}], 
 

 
    ]); 
 

 
    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)]); 
 

 

 
    } 
 
    // you can set individual columns to be the default columns (instead of populating via the loop above) like this: 
 
    // initState.selectedValues.push(data.getColumnLabel(4)); 
 

 
    var chart = new google.visualization.ChartWrapper({ 
 
     chartType: 'ColumnChart', 
 
     containerId: 'chart_div', 
 
     dataTable: data, 
 
     options: { 
 
      width: 420, 
 
      height: 200, 
 
      isStacked: true , 
 
      title:'Sum Of Quant Column Labels By Retailers', 
 
      colors:['#3366cc','#FF5733','#808080'], 
 
      bar: {groupWidth:'40%'}, 
 
      chartArea:{left:32,width:'70%'}, 
 
     } 
 
    }); 
 

 
    var columnFilter = new google.visualization.ControlWrapper({ 
 
     controlType: 'CategoryFilter', 
 
     containerId: 'colFilter_div', 
 
     dataTable: columnsTable, 
 
     options: { 
 
      filterColumnLabel: 'colLabel', 
 
      filterColumnIndex: 1, 
 
      useFormattedValue: true, 
 
      ui: { 
 

 
       label: 'Retailers', 
 
       allowTyping: false, 
 
       allowMultiple: false, 
 
       caption : 'All Retailers', 
 
       allowNone: true, 
 
       selectedValuesLayout: 'belowStacked' 
 
      } 
 
     }, 
 
     state: initState 
 
    }); 
 

 
    function setChartView() { 
 
     var state = columnFilter.getState(); 
 
     var row; 
 
     var view = { 
 
      columns: [0] 
 
     }; 
 
     for (var i = 0; i < state.selectedValues.length; i++) { 
 
      row = columnsTable.getFilteredRows([{column: 1, value: state.selectedValues[i]}])[0]; 
 
      view.columns.push(columnsTable.getValue(row, 0)); 
 
     } 
 
     // sort the indices into their original order 
 
     view.columns.sort(function (a, b) { 
 
      return (a - b); 
 
     }); 
 
     if (state.selectedValues.length > 0) { 
 
      chart.setView(view); 
 
     } else { 
 
      chart.setView(null); 
 
     } 
 
     chart.draw(); 
 
    } 
 
    google.visualization.events.addListener(columnFilter, 'statechange', setChartView); 
 

 
    setChartView(); 
 
    columnFilter.draw(); 
 

 
}
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="chart_div"></div> 
 
<div id="colFilter_div"></div>

+0

Спасибо, парень довольно долго царапал мне голову Ты мой спаситель сегодня вечером. Как ты можешь видеть, я просто начинаю. И это действительно помогает мне. Привет, Кодирование сэр ... –

+0

спасибо, человек, очень ценим его –

Смежные вопросы