一个数据集,两个图表?

问题描述 投票:0回答:1

我有一个数据集,想要创建两个图表。我困扰的是如何将数据集组件分配给系列响应轴:

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

function drawChart() {
  var gcParamsHvTimeDiv = document.getElementById('gcDivParamsHvTime');
  var gcParamsHvPathDiv = document.getElementById('gcDivParamsHvPath');
  
  var dataParamsHv = new google.visualization.DataTable();

dataParamsHv.addColumn('timeofday', 'Time');
dataParamsHv.addColumn('number', 'Height');
dataParamsHv.addColumn('number', 'Speed');
dataParamsHv.addColumn('number', 'Flightpath');

dataParamsHv.addRows([
 [[16,07,35],170,0.00,0.00], /*...*/ [[17,35,55],248,0.87,106.36]
]);

现在我想根据给定的数据集创建两个图表:“高度和速度与时间”和“高度和速度与飞行路径”。

  var gcParamsHvTimeOptions = {
    title: 'Height and speed - time',
    width: 1000,
    height: 600,
    chartArea: { left: '7%', top: '9%', right: '7%', bottom: '9%', backgroundColor: {strokeWidth: 1, stroke: '#666'}},
    // Gives each series an axis that matches the vAxes number below.
    series: {
      0: {targetAxisIndex: 0, lineDashStyle: [3, 1]},
      1: {targetAxisIndex: 1}
    },
    vAxes: {
      0: {title: 'Height [m]'},
      1: {title: 'Speed [km/h]'}
    },
    hAxis: {
      title: 'Time [h:m]',
      titleTextStyle: {italic: false, bold: true}
    },
    vAxis: {
      titleTextStyle: {italic: false, bold: true},
      gridlines: {count: 7},
      minorGridlines: {count: 0}
    }
  };

  var gcParamsHvPathOptions = {
    title: 'Height and speed - flight path',
    width: 1000,
    height: 600,
    chartArea: { left: '7%', top: '9%', right: '7%', bottom: '9%', backgroundColor: {strokeWidth: 1, stroke: '#666'}},
    // Gives each series an axis that matches the vAxes number below.
    series: {
      0: {targetAxisIndex: 0, lineDashStyle: [3, 1]},
      1: {targetAxisIndex: 1}
    },
    vAxes: {
      0: {title: 'Height [m]'},
      1: {title: 'Speed [km/h]'}
    },
    hAxis: {
      title: 'Flight path [km]',
      titleTextStyle: {italic: false, bold: true}
    },
    vAxis: {
      titleTextStyle: {italic: false, bold: true},
      gridlines: {count: 7},
      minorGridlines: {count: 0}
    }
  };

  function gcDrawParams() {
    var chartParamsHvTime = new google.visualization.LineChart(gcParamsHvTimeDiv);
    chartParamsHvTime.draw(dataParamsHv, gcParamsHvTimeOptions);
    var chartParamsHvPath = new google.visualization.LineChart(gcParamsHvPathDiv);
    chartParamsHvPath.draw(dataParamsHv, gcParamsHvPathOptions);
  }
  gcDrawParams();
}

那么如何为

series
分配适当的索引。
vAxes

我让它使用两个不同的数据集,但这意味着冗余数据(高度、速度),我想避免。

谢谢你 马库斯

google-visualization
1个回答
0
投票

要将一个数据集用于多个图表,请通过指定要使用的列索引来操作每个图表的 DataTable 视图。

function gcDrawParams() {
  var viewForTime = new google.visualization.DataView(dataParamsHv);
  viewForTime.setColumns([0, 1, 2]);  // Time, Height, Speed

  var chartParamsHvTime = new google.visualization.LineChart(gcParamsHvTimeDiv);
  chartParamsHvTime.draw(viewForTime, gcParamsHvTimeOptions);

  var viewForPath = new google.visualization.DataView(dataParamsHv);
  viewForPath.setColumns([3, 1, 2]);  // Flightpath, Height, Speed

  var chartParamsHvPath = new google.visualization.LineChart(gcParamsHvPathDiv);
  chartParamsHvPath.draw(viewForPath, gcParamsHvPathOptions);
}

通过这种方式,您可以在以不同方式呈现数据的同时维护数据的一个真实来源。

© www.soinside.com 2019 - 2024. All rights reserved.