Как нарисовать Google Charts типа сложенных столбцов - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть такая структура таблицы:

Name Grade       Count
X    VeryGood      10
X    Excellent      2
X    Failed         0
Y    VeryGood       7
Y    Excellent      1
Y    Failed         2

Я хочу показать эти данные на диаграмме с накоплением гул, как показано ниже:

По горизонтали: счетчик

По вертикали: имя

Есть идеи, как мне этого добиться?PS: я использую источник данных ajax.

enter image description here

1 Ответ

0 голосов
/ 23 ноября 2018

Чтобы нарисовать диаграмму, таблицу данных нужно будет структурировать следующим образом,
с сериями / столбцами для каждой оценки.

['Name', 'VeryGood', 'Excellent', 'Failed'],
['X', 10, 2, 0],
['Y', 7, 1, 2],

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

Вместо этого мы можем использовать метод Google DataView и group.

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

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = google.visualization.arrayToDataTable([
    ['Name', 'Grade', 'Count'],
    ['X', 'VeryGood', 10],
    ['X', 'Excellent', 2],
    ['X', 'Failed', 0],
    ['Y', 'VeryGood', 7],
    ['Y', 'Excellent', 1],
    ['Y', 'Failed', 2],
  ]);

  var aggColumns = [];
  var viewColumns = [0];

  var distinctLabels = data.getDistinctValues(1);
  distinctLabels.forEach(function (label, index) {
    viewColumns.push({
      calc: function (dt, row) {
        if (dt.getValue(row, 1) === label) {
          return dt.getValue(row, 2);
        }
        return null;
      },
      type: 'number',
      label: label
    });
    aggColumns.push({
      column: index + 1,
      aggregation: google.visualization.data.sum,
      type: 'number'
    });
  });

  var view = new google.visualization.DataView(data);
  view.setColumns(viewColumns);

  var groupData = google.visualization.data.group(
    view,
    [0],
    aggColumns
  );

  var chart = new google.visualization.BarChart(document.getElementById('chart'));
  chart.draw(groupData, {
    isStacked: true
  });
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...