【问题标题】:Google Charts Multiple Line Charts in Time Series谷歌图表时间序列中的多个折线图
【发布时间】:2021-07-21 17:12:11
【问题描述】:

如何制作具有多个折线图的谷歌图表。我知道如何在chartsjs中做到这一点,但它让我在谷歌图表中感到困惑。我的尝试:

   <script>

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

function drawCurveTypes() {
      var data = new google.visualization.DataTable();
      data.addColumn('date', 'X');
      data.addColumn('number', 'Person 1');
      data.addColumn('number', 'Person 2');

        data.addRows(9);

        data.setValue(0, 0, new Date(2010, 1, 1));
        data.setValue(0, 1, 215);
        data.setValue(0, 2, 215);

        data.setValue(1, 0, new Date(2010, 2, 1));
        data.setValue(1, 2, 213);

        data.setValue(2, 0, new Date(2010, 2, 4));
        data.setValue(2, 2, 213);

        data.setValue(3, 0, new Date(2010, 2, 8));
        data.setValue(3, 2, 213);


        data.setValue(4, 0, new Date(2010, 3, 1));
        data.setValue(4, 2, 220);

        data.setValue(5, 0, new Date(2010, 4, 1));
        data.setValue(5, 2, 190);

      var options = {
        {#chartArea:{ width:"100%", height:"100%"},#}
        title: "Persons Performance over Time",
        height: 500,
        width: 1300,
        hAxis: {
          title: 'Time'
        },
        vAxis: {
          title: 'Scores'
        },
        series: {
          1: {curveType: 'function'}
        },

      };

      var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
      chart.draw(data, options);
    }


    </script>

但它似乎只制作了一张折线图。随着时间的推移,我有第 1 个人和第 2 个人的分数,所以它是一个时间序列数据。这是我的输出目标:

【问题讨论】:

    标签: javascript html google-visualization linechart


    【解决方案1】:

    看起来你的想法是对的,你只需要为第一个系列添加值。

    在这里,您为这两个系列添加了值。

    data.setValue(0, 0, new Date(2010, 1, 1));
    data.setValue(0, 1, 215);  // series 1
    data.setValue(0, 2, 215);  // series 2
    

    但由于它们都在同一个 y 轴值上,因此只有一个可见。
    并且不再添加第 1 行的值,因此只绘制了一个点。

    data.setValue(1, 0, new Date(2010, 2, 1));
    data.setValue(1, 2, 213);  // series 2
    
    data.setValue(2, 0, new Date(2010, 2, 4));
    data.setValue(2, 2, 213);  // series 2
    
    data.setValue(3, 0, new Date(2010, 2, 8));
    data.setValue(3, 2, 213);  // series 2
    
    data.setValue(4, 0, new Date(2010, 3, 1));
    data.setValue(4, 2, 220);  // series 2
    
    data.setValue(5, 0, new Date(2010, 4, 1));
    data.setValue(5, 2, 190);  // series 2
    

    要显示系列 1,您需要为数据表第 1 列添加值。
    所以它需要类似于以下内容......

    data.setValue(1, 0, new Date(2010, 2, 1));
    data.setValue(1, 1, 200);  // series 1
    data.setValue(1, 2, 213);  // series 2
    
    data.setValue(2, 0, new Date(2010, 2, 4));
    data.setValue(2, 1, 200);  // series 1
    data.setValue(2, 2, 213);  // series 2
    
    data.setValue(3, 0, new Date(2010, 2, 8));
    data.setValue(3, 1, 210);  // series 1
    data.setValue(3, 2, 213);  // series 2
    
    data.setValue(4, 0, new Date(2010, 3, 1));
    data.setValue(4, 1, 207);  // series 1
    data.setValue(4, 2, 220);  // series 2
    
    data.setValue(5, 0, new Date(2010, 4, 1));
    data.setValue(5, 1, 177);  // series 1
    data.setValue(5, 2, 190);  // series 2
    

    编辑

    setValue 方法采用以下参数...

    setValue(rowIndex, columnIndex, value);
    

    第一个参数是要更新的数据表中的行索引。
    第二个参数是要更新的数据表中的列索引。

    在这里,您要添加 9 个空白行...

            data.addRows(9);
    

    这需要您返回并单独更新每一行和每一列。

        data.setValue(0, 0, new Date(2010, 1, 1));
        data.setValue(0, 1, 215);
        data.setValue(0, 2, 215);
    

    但如果您已经拥有该行的值,
    您可以使用addRow 方法。

    所以,不是添加 9 个空白行,而是一次添加一个行值...

    data.addRow([new Date(2010, 1, 1), 215, 215]);
    

    或者如果你所有的数据都是数组的形式,
    您可以使用addRows 方法同时添加所有行,
    不设置行数...

    data.addRows([
      [new Date(2010, 1, 1), 215, 215],
      [new Date(2010, 2, 1), 215, 215],
      [new Date(2010, 3, 1), 215, 215]
    ]);
    

    【讨论】:

    • 但我不明白的一件事是实际值之前的数字,如果我只有日期和实际分数怎么办?假设是 2020 年 7 月 22 日,100。我应该在那些 1、1、1、2 中放什么我不明白那些