Диаграмма Google ведет себя ненормально - PullRequest
0 голосов
/ 14 марта 2019

Итак, у меня есть эта диаграмма Google, которая получает данные из базы данных, и она выглядит так:

enter image description here

Как видите, линия перетаскиваетсяпо всем данным (чем дальше, тем хуже)

и это мой код:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
</head>
<body>
<div id="dashboard">
         <div id="chart_div"></div>
         <div id="control_div"></div>
         <div id='dbgchart'></div>
</body>
</html>

<?php 
include "../includes/db_conn.php";

$sql = "SELECT FD_DATUM_INGEVOERD || ' ' || FT_TIJD_INGEVOERD FROM BANDZENDINGEN WHERE FD_DATUM_INGEVOERD BETWEEN '2012-06-04' AND '2012-06-05' AND FI_GEBRUIKER1='205'";
$sfm = $dbh->prepare($sql);
$sfm->execute();

$sqla = "SELECT FI_AFVOERKANAAL FROM BANDZENDINGEN WHERE FD_DATUM_INGEVOERD BETWEEN '2012-06-04' AND '2012-06-05' AND FI_GEBRUIKER1='205'";
$sfma = $dbh->prepare($sqla);
$sfma->execute();

$dateArr = $sfm->fetchAll(PDO::FETCH_COLUMN, 0);

$numbers = $sfma->fetchAll(PDO::FETCH_COLUMN, 0);
?>
<script type="text/javascript">
google.charts.load('44', {
  callback: drawAxisTickColors,
  packages: ['controls', 'corechart']
});


function drawAxisTickColors() {
  var data = new google.visualization.DataTable();
  data.addColumn('datetime', 'Date');
  data.addColumn('number', 'value');

  var dateArr2 = (<?php echo json_encode($dateArr); ?>);
  console.log(dateArr2);

  var bitcoinArr = (<?php echo json_encode($numbers); ?>);
  console.log(bitcoinArr);

  bitcoinArr = bitcoinArr.map(Number);

  var array = [];

  var length = Math.min(dateArr2.length, bitcoinArr.length);
  for (var i = 0; i < length; ++i) {
  array.push([ new Date(dateArr2[i]), bitcoinArr[i] ]);
  }

  data.addRows(array);

  var control = new google.visualization.ControlWrapper({
  controlType: 'ChartRangeFilter',
  containerId: 'control_div',
  options: {
      filterColumnIndex: 0,
      ui: {
          chartOptions: {
              height: 50,
              width: 600,
              chartArea: {
                  width: '80%'
              }
          }
      }
  }
  });

  var chart = new google.visualization.ChartWrapper({
  chartType: 'LineChart',
  containerId: 'chart_div',
  options: {
    width: 620,
    chartArea: {
      width: '80%'
    },
    hAxis: {
      format: 'hh:ss',
      slantedText: false,
      maxAlternation: 1
    }
  }
  });

 function setOptions() {
  var firstDate;
  var lastDate;
  var v = control.getState();

  if (v.range) {
    document.getElementById('dbgchart').innerHTML = v.range.start + ' to ' + v.range.end;
    firstDate = new Date(v.range.start.getTime() + 1);
    lastDate = new Date(v.range.end.getTime() - 1);
    data.setValue(v.range.start.getMonth(), 0, firstDate);
    data.setValue(v.range.end.getMonth(), 0, lastDate);
  } else {
    firstDate = data.getValue(0, 0);
    lastDate = data.getValue(data.getNumberOfRows() - 1, 0);
  }

  var ticks = [];
  for (var i = firstDate.getMonth(); i <= lastDate.getMonth(); i++) {
    ticks.push(data.getValue(i, 0));
  }

  chart.setOption('hAxis.ticks', ticks);
  chart.setOption('hAxis.viewWindow.min', firstDate);
  chart.setOption('hAxis.viewWindow.max', lastDate);
  if (dash) {
    chart.draw();
  }
 }

 setOptions();

 google.visualization.events.addListener(control, 'statechange', setOptions);

 var dash = new google.visualization.Dashboard(document.getElementById('dashboard'));
 dash.bind([control], [chart]);
 dash.draw(data);
 }
 </script>

Я уже пытался удалить миллисекунды, не имеет значения.

Так что я делаю не так?Почему это происходит?Пожалуйста, помогите.

РЕДАКТИРОВАТЬ

только что что-то нашел, он пропускает номер набора, как: 2012-06-04 07:03:06 14 данные существуют, но никогда не показываются

РЕДАКТИРОВАТЬ

Я обнаружил проблему

  if (v.range) {
    document.getElementById('dbgchart').innerHTML = v.range.start + ' to ' + v.range.end;
    firstDate = new Date(v.range.start.getTime() + 1);
    lastDate = new Date(v.range.end.getTime() - 1);
    data.setValue(v.range.start.getMonth(), 0, firstDate);
    data.setValue(v.range.end.getMonth(), 0, lastDate);
  } else {
    firstDate = data.getValue(0, 0);
    lastDate = data.getValue(data.getNumberOfRows() - 1, 0);
  }

data.setValue - это проблема, но как ее исправить?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

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

data.addRows(array);
data.sort([{column: 0}]);
0 голосов
/ 14 марта 2019

делает это работает для меня:

   data.setValue(v.range.start.getMonth(), 0);
   data.setValue(v.range.end.getMonth(), 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...