【问题标题】:I want a google chart with combined x-axis values我想要一个带有组合 x 轴值的谷歌图表
【发布时间】:2018-11-07 11:47:47
【问题描述】:

我得到这样的图表-->https://imgur.com/8DGPUTC 但我想要像这样结合 x 轴的谷歌图表--> https://imgur.com/a/2lXxMv5

这是我的代码:

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

function drawChart() {
  var data = google.visualization.arrayToDataTable([
               ["BusinessUnit", "Year", "AvgEmpCost"],
               ["BU-1", 2014, 119329],
               ["BU-1", 2015, 125542],
               ["BU-1", 2016, 120894],
               ["BU-1", 2017, 130776],
               ["BU-1", 2018, 141465],
               ["BU-1", 2019, 153028],
               ["BU-2", 2014, 130722],
               ["BU-2", 2015, 131218],
               ["BU-2", 2016, 131451],
               ["BU-2", 2017, 134897],
               ["BU-2", 2018, 138432],
               ["BU-2", 2019, 142061],
  ]);

  var options = {
    chart: {
      title: 'buspentamt',

    }
  };

  var chart = new google.charts.Bar(document.getElementById('columnchart_material'));

  chart.draw(data, google.charts.Bar.convertOptions(options));
}

【问题讨论】:

    标签: charts google-api google-visualization


    【解决方案1】:

    要生成相关图表,您需要每年的系列列,
    数据表将需要类似于以下的格式...

    var data = google.visualization.arrayToDataTable([
      ["BusinessUnit", "2014", "2015", "2016"],
      ["BU-1", 119329, 125542, 120894],
      ["BU-2", 130722, 131218, 131451],
    ]);
    

    不确定数据是如何构建的,
    但我们可以使用数据视图将行转换为列,
    然后使用group 函数聚合数据。
    这将避免不得不修改后端查询。

    请参阅下面的工作 sn-p 示例...

      google.charts.load('current', {packages:['bar']});
      google.charts.setOnLoadCallback(drawChart);
    
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ["BusinessUnit", "Year", "AvgEmpCost"],
          ["BU-1", 2014, 119329],
          ["BU-1", 2015, 125542],
          ["BU-1", 2016, 120894],
          ["BU-1", 2017, 130776],
          ["BU-1", 2018, 141465],
          ["BU-1", 2019, 153028],
          ["BU-2", 2014, 130722],
          ["BU-2", 2015, 131218],
          ["BU-2", 2016, 131451],
          ["BU-2", 2017, 134897],
          ["BU-2", 2018, 138432],
          ["BU-2", 2019, 142061],
        ]);
    
        var options = {
          chart: {
            title: 'buspentamt'
          },
          height: 400
        };
    
        // init column arrays
        var aggColumns = [];
        var viewColumns = [0];
    
        // build view & agg columns for each year
        data.getDistinctValues(1).forEach(function (year, index) {
          // add view column for year
          viewColumns.push({
            calc: function (dt, row) {
              if (dt.getValue(row, 1) === year) {
                return dt.getValue(row, 2);
              }
              return null;
            },
            label: year,
            type: 'number'
          });
    
          // add agg column
          aggColumns.push({
            aggregation: google.visualization.data.sum,
            column: index + 1,
            label: year,
            type: 'number'
          });
        });
    
        // set view columns
        var view = new google.visualization.DataView(data);
        view.setColumns(viewColumns);
    
        // agg view by business unit
        var aggData = google.visualization.data.group(
          view,
          [0],
          aggColumns
        );
    
        var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
    
        // use aggData to draw chart
        chart.draw(aggData, google.charts.Bar.convertOptions(options));
      }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="columnchart_material"></div>

    编辑

    计算每个BU的年数,
    请参阅以下工作 sn-p...

    google.charts.load('current', {packages:['bar']});
    google.charts.setOnLoadCallback(drawChart);
    
    function drawChart() {
      var data = google.visualization.arrayToDataTable([
        ["BusinessUnit", "Year"],
        ["BU-1", 2014],
        ["BU-1", 2015],
        ["BU-1", 2016],
        ["BU-1", 2017],
        ["BU-1", 2018],
        ["BU-1", 2019],
        ["BU-2", 2014],
        ["BU-2", 2015],
        ["BU-2", 2016],
        ["BU-2", 2017],
        ["BU-2", 2018],
        ["BU-2", 2019],
      ]);
    
      var options = {
        chart: {
          title: 'buspentamt'
        },
        height: 400
      };
    
      // init column arrays
      var aggColumns = [];
      var viewColumns = [{
        calc: function () {
          return 'Number of Years';
        },
        label: 'Years',
        type: 'string'
      }];
    
      // build view & agg columns for each bu
      data.getDistinctValues(0).forEach(function (bu, index) {
        // add view column for bu
        viewColumns.push({
          calc: function (dt, row) {
            if (dt.getValue(row, 0) === bu) {
              return 1;
            }
            return null;
          },
          label: bu,
          type: 'number'
        });
    
        // add agg column
        aggColumns.push({
          aggregation: google.visualization.data.sum,
          column: index + 1,
          label: bu,
          type: 'number'
        });
      });
    
      // set view columns
      var view = new google.visualization.DataView(data);
      view.setColumns(viewColumns);
    
      // agg view by business unit
      var aggData = google.visualization.data.group(
        view,
        [0],
        aggColumns
      );
    
      var chart = new google.charts.Bar(document.getElementById('chart'));
    
      // use aggData to draw chart
      chart.draw(aggData, google.charts.Bar.convertOptions(options));
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart"></div>

    【讨论】:

    • 这种方法对于我尝试使用折线图的所有图表都很常见,但图表没有出现@WhiteHat
    • 您可以检查浏览器的控制台是否有错误(大多数浏览器上为 F12)——您使用的是 material 折线图吗? --> google.charts.Line -- 一定要包含'line' 包 -- 或者如果是classic 图表 --> google.visualization.LineChart -- 一定要包含'corechart' 包...
    • 我有这样的数据:["BusinessUnit", "Year"], ["BU-1", 2014], ["BU-1", 2015], ["BU-1" , 2016], ["BU-1", 2017], ["BU-1", 2018], ["BU-1", 2019], ["BU-2", 2014], ["BU-2" , 2015], ["BU-2", 2016], ["BU-2", 2017], ["BU-2", 2018], ["BU-2", 2019], 我如何绘制图表这个数据@WhiteHat
    • 是的,我想要图表来计算每个 bu@WhiteHat 的年数
    • 我有 10 个图表我希望它保存在仪表板中,具有添加图表、保存、删除、调整大小和拖放(html、js、css)等功能,如元数据库仪表板。感谢您的任何帮助@WhiteHat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2014-04-22
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多