Анимация не работает для третьего столбца гистограммы в Google Charts (Визуализация) - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Google Charts (Google Visualization), все работало нормально.Но сейчас я столкнулся со странной проблемой в анимации.Это гистограмма с накоплением.Первые два столбца (столбцы) анимируются безупречно, но третий столбец (столбец) появляется сразу, анимация не работает для последнего столбца (третий столбец).

Я пробовал всего 2 бара, а теперь второй баранимация не работает (пришла сразу).Понятно, что проблема в последнем баре.Это ошибка в гистограмме с конца Google Chart?

Вот мой код:

            var data = google.visualization.arrayToDataTable([
            ['Status', awating, not_interested, interested, { role: 'annotation' }],
            ['SANDRA COOMBS', 2, 4, 2, ''],
            ['VINCENT ODA', 2, 2, 2, ''],
        ]);
        arTotal = niTotal = iTotal = 0;
        for (var i = 0; i < data.getNumberOfRows(); i++) {
            if (data.getValue(i, 1) != null) {
                arTotal += data.getValue(i, 1);
            }
            if (data.getValue(i, 2) != null) {
                niTotal += data.getValue(i, 2);
            }
            if (data.getValue(i, 3) != null) {
                iTotal += data.getValue(i, 3);
            }
        }
        var view = new google.visualization.DataView(data);
        view.setColumns([0, 1,
            {
                calc: "stringify",
                sourceColumn: 1,
                type: "string",
                role: "annotation"
            },
            2, {
                calc: "stringify",
                sourceColumn: 2,
                type: "string",
                role: "annotation"
            },
            3, {
                calc: "stringify",
                sourceColumn: 3,
                type: "string",
                role: "annotation"
            }]);
        var options = {
            legend: {
                position: 'none'
            },
            chartArea: { width: width, height: height, right: right },
            isStacked: true,
            orientation: orientation.orientation,
            colors: ['#008FBE', '#BE1E2D', '#00BD90'],
            fontSize: '12',
            fontName: 'OpenSans-Regular',
            hAxis: {
                viewWindowMode: 'maximized',
            },
            vAxis: {
                viewWindowMode: 'maximized',
            },
            animation: {
                startup: true,
                duration: 1500,
                easing: 'out',
            },
        };
        var chart = new google.visualization.ColumnChart(document.getElementById("currentStatusChart"));
        google.visualization.events.addListener(chart, 'ready', readyHandler);
        chart.draw(view, options);

1 Ответ

0 голосов
/ 13 сентября 2018

Я сталкивался с различными ошибками при использовании анимации на startup,
, особенно когда DataView используется для рисования диаграммы

Обходной путь - преобразовать DataView в DataTable перед построением диаграммы,
вы можете использовать метод -> toDataTable()

view.toDataTable()

, который, кажется, помогает в этой ситуации,
см. Следующий рабочий фрагмент ...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = google.visualization.arrayToDataTable([
      ['Status', 'awating', 'not_interested', 'interested', { role: 'annotation' }],
      ['SANDRA COOMBS', 2, 4, 2, ''],
      ['VINCENT ODA', 2, 2, 2, ''],
  ]);
  arTotal = niTotal = iTotal = 0;
  for (var i = 0; i < data.getNumberOfRows(); i++) {
      if (data.getValue(i, 1) != null) {
          arTotal += data.getValue(i, 1);
      }
      if (data.getValue(i, 2) != null) {
          niTotal += data.getValue(i, 2);
      }
      if (data.getValue(i, 3) != null) {
          iTotal += data.getValue(i, 3);
      }
  }
  var view = new google.visualization.DataView(data);
  view.setColumns([0, 1,
      {
          calc: "stringify",
          sourceColumn: 1,
          type: "string",
          role: "annotation"
      },
      2, {
          calc: "stringify",
          sourceColumn: 2,
          type: "string",
          role: "annotation"
      },
      3, {
          calc: "stringify",
          sourceColumn: 3,
          type: "string",
          role: "annotation"
      }]);
  var options = {
      legend: {
          position: 'none'
      },
      //chartArea: { width: width, height: height, right: right },
      isStacked: true,
      //orientation: orientation.orientation,
      colors: ['#008FBE', '#BE1E2D', '#00BD90'],
      fontSize: '12',
      fontName: 'OpenSans-Regular',
      hAxis: {
          viewWindowMode: 'maximized',
      },
      vAxis: {
          viewWindowMode: 'maximized',
      },
      animation: {
          startup: true,
          duration: 1500,
          easing: 'out',
      },
  };
  var chart = new google.visualization.ColumnChart(document.getElementById("currentStatusChart"));
  chart.draw(view.toDataTable(), options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="currentStatusChart"></div>
...