Google图表:在图表中设置精确的日期边界(使用过滤器滑块时)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google图表:在图表中设置精确的日期边界(使用过滤器滑块时)相关的知识,希望对你有一定的参考价值。

我在网站上显示一个或多个时间图。我正在使用DateRangeSlider,因此用户可以输入他们想要检查的确切时间。理想情况下,我希望用户能够在一段时间内拨号,而且这个时间应该在图表上显示。但是,图表将始终从过滤集中的第一个可用数据点开始。例如,我拨打21-01-2019作为开始日期,但下一个Datapoint仅在24-01-2019,那么图表也将在该日期开始。对于我的用户而言,如果图表在第一个数据点之前保持空白状态会更好,但实际上从21-01-2019开始。更好的方法是采用过滤集之外的第一个数据点,并且仍然在集合的最后一个局外人和内部的第一个点之间显示一条线。

这是我到目前为止使用的代码:


var dashboard = new google.visualization.Dashboard(chartSliderPos);

var rangeSlider = new google.visualization.ControlWrapper({
    'controlType': 'DateRangeFilter',
    'containerId': chartSliderPos,
    'options': {
    'filterColumnLabel': 'Time',
    'ui': {
        'step': 'hour'
        }
    }
});

// Create our data table out of JSON data loaded from server.
var data = new google.visualization.DataTable();
data.addColumn("date", "Time");
data.addColumn("number", "Value");
data.addRows(resultArray);

// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.ChartWrapper({
    'chartType': 'SteppedAreaChart',
    'containerId': pos,
    'options': {
        'width': 750,
        'height': 300,
        'explorer': {},
        'legend': 'none'
    }
});
dashboard.bind(rangeSlider, chart);

//callback for slider manipulation 
chartsArray.push( function(a, b) {
    rangeSlider.setState({'lowValue': a, 'highValue': b});
    rangeSlider.draw();
});

dashboard.draw(data);

Actual Chart正如您所看到的,范围滑块的另一个日期比图表显示的日期要多,因为下一个数据点只能在以后使用。

编辑:通过查看谷歌的例子,我找到了一个例子,其中范围滑块完全符合我的要求。但是,我不需要注释图表,我不知道是什么让这个工作在这个例子中。示例:https://developers.google.com/chart/interactive/docs/gallery/annotationchart

答案

您可以使用hAxis.viewWindow选项在图表上设置特定的开始和结束日期。

  hAxis: {
    format: 'yy/MM/dd HH:mm:ss',
    viewWindow: {
      min: new Date(2019, 3, 1),
      max: new Date(2019, 3, 30)
    }
  }

但是,范围过滤器仅允许数据的最小值和最大值。

相反,您可以使用自己的过滤器来拨入日期。

在这里,使用jquery ui滑块...

google.charts.load('current', {
  packages: ['controls', 'corechart']
}).then(function () {
  var resultArray = [
    [new Date(2019, 3, 18), 555],
    [new Date(2019, 3, 19), 415],
    [new Date(2019, 3, 20), 210],
    [new Date(2019, 3, 21), 210],
    [new Date(2019, 3, 22), 210],
  ];
  var data = new google.visualization.DataTable();
  data.addColumn('date', 'Time');
  data.addColumn('number', 'Value');
  data.addRows(resultArray);

  var chart = new google.visualization.ChartWrapper({
    chartType: 'SteppedAreaChart',
    containerId: 'chart_div',
    dataTable: data,
    options: {
      chartArea: {
        height: '100%',
        width: '100%',
        top: 24,
        left: 72,
        right: 72,
        bottom: 72
      },
      height: '100%',
      width: '100%',
      explorer: {},
      legend: 'none',
      hAxis: {
        format: 'yy/MM/dd HH:mm:ss',
        viewWindow: {
          min: new Date(2019, 3, 1),
          max: new Date(2019, 3, 30)
        }
      }
    }
  });
  chart.draw();

  var formatDate = new google.visualization.DateFormat({
    pattern: chart.getOption('hAxis.format')
  });

  $('#date-min').html(formatDate.formatValue(chart.getOption('hAxis.viewWindow.min')));
  $('#date-max').html(formatDate.formatValue(chart.getOption('hAxis.viewWindow.max')));

  $('.slider > div').slider({
    range: true,
    min: chart.getOption('hAxis.viewWindow.min').getTime(),
    max: chart.getOption('hAxis.viewWindow.max').getTime(),
    values: [
      chart.getOption('hAxis.viewWindow.min').getTime(),
      chart.getOption('hAxis.viewWindow.max').getTime()
    ],
    slide: function(event, ui) {
      chart.setOption('hAxis.viewWindow.min', new Date(ui.values[0]));
      chart.setOption('hAxis.viewWindow.max', new Date(ui.values[1]));
      $('#date-min').html(formatDate.formatValue(new Date(ui.values[0])));
      $('#date-max').html(formatDate.formatValue(new Date(ui.values[1])));
      chart.draw();
    }
  });
});
label {
  font-family: Arial;
  font-size: 12px;
  white-space: nowrap;
}

.chart {
  height: 300px;
}

.slider {
  width: 100%;
}

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  padding: 16px;
}

.table-row {
  display: table-row;
}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div class="chart" id="chart_div"></div>
<div class="table">
  <div class="table-row">
    <div class="table-cell">
      <label id="date-min">19/04/01</label>
    </div>
    <div class="table-cell slider">
      <div></div>
    </div>
    <div class="table-cell">
      <label id="date-max">19/04/30</label>
    </div>
  </div>
</div>

以上是关于Google图表:在图表中设置精确的日期边界(使用过滤器滑块时)的主要内容,如果未能解决你的问题,请参考以下文章

在 Chart.js 中设置图表高度

如何在 Pyqtgraph 中设置图表的拉伸因子?

在 Chart.js 中设置图表标题、x 轴和 y 轴的名称?

Google 可视化仪表板错误

如何通过 Google 图表 API 使用 X 轴中的日期?

1Echarts系列Vue中设置echarts折线图样式(图表网格标签提示标题文字),手把手教程系列