【问题标题】:Google Chart: Get Column Count in Dashboard for Bar Chart谷歌图表:在仪表板中获取条形图的列数
【发布时间】:2016-10-17 21:58:41
【问题描述】:

我有一个如下所示的 JSON 数据来在谷歌图表中构建仪表板。 我想绘制一个每月条形图,其中 x 轴作为 scan_time(月份),y 轴作为进入该月的 tag_id 的计数。 tag_ids 可以重复。

以 JSON 格式输入数据:

 [ 
       {  
          "tag_id":"04:0f",
          "scan_time":"2016-09-29 06:47:47",
       },
       {  
          "tag_id":"04:0f",
          "scan_time":"2016-09-29 14:48:42",
       },
       {  
          "tag_id":"99:9n",
          "scan_time":"2016-10-29 06:47:47",
       },
       {  
          "tag_id":"05:m8",
          "scan_time":"2016-11-29 06:48:42",
       }
    ]

类似

Month       Count
    Sept        2
    Oct         1
    Nov         1

【问题讨论】:

  • 你需要转换jsoninto a format google will accept,你打算用javascript来操作数据吗?
  • 是的,我正在将数据格式化为 Datatable,以便 Google Chart 可以在 Javascript 中接受它。但无法理解如何在准备好的数据表上编写查询以获取“tag_id”的计数以制作条形图。

标签: charts google-visualization


【解决方案1】:

一旦将 JSON 加载到 DataTable 中,

使用数据处理方法 --> group()

返回一个聚合的DataTable

请参阅以下工作 sn-p,
group 方法将第一列转换为“月”字符串,
并汇总每个“月”的标签 ID 计数

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

function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['date', 'tag_id'],
    [new Date('2016-09-29 06:47:47'), '04:0f'],
    [new Date('2016-09-29 14:48:42'), '04:0f'],
    [new Date('2016-10-29 06:47:47'), '99:9n'],
    [new Date('2016-11-29 06:48:42'), '05:m8'],
  ]);

  var formatDate = new google.visualization.DateFormat({pattern: 'MMMM'});

  var dataGroup = google.visualization.data.group(
    data,

    // group by column
    [{
      column: 0,
      label: 'Month',
      modifier: function (val) {
        return formatDate.formatValue(val);
      },
      type: 'string'
    }],

    // agg columns
    [{
      aggregation: google.visualization.data.count,
      column: 1,
      label: 'Tag Count',
      type: 'number'
    }]
  );

  var table = new google.visualization.Table(document.getElementById('chart_div'));
  table.draw(dataGroup);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>

编辑

使用 DataView 对行进行自定义排序

var view = new google.visualization.DataView(dataGroup);
view.setRows([2, 1, 0]);

使用view 绘制表格图表,以及任何其他图表...

下面的 sn-p 包含一个 ColumnChart...

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

function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['date', 'tag_id'],
    [new Date('2016-09-29 06:47:47'), '04:0f'],
    [new Date('2016-09-29 14:48:42'), '04:0f'],
    [new Date('2016-10-29 06:47:47'), '99:9n'],
    [new Date('2016-11-29 06:48:42'), '05:m8'],
  ]);

  var formatDate = new google.visualization.DateFormat({pattern: 'MMMM'});

  var dataGroup = google.visualization.data.group(
    data,

    // group by column
    [{
      column: 0,
      label: 'Month',
      modifier: function (val) {
        return formatDate.formatValue(val);
      },
      type: 'string'
    }],

    // agg columns
    [{
      aggregation: google.visualization.data.count,
      column: 1,
      label: 'Tag Count',
      type: 'number'
    }]
  );

  var view = new google.visualization.DataView(dataGroup);
  view.setRows([2, 1, 0]);

  var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
  chart.draw(view);

  var table = new google.visualization.Table(document.getElementById('table_div'));
  table.draw(view);
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
<div id="table_div"></div>

编辑 2

使用 ChartWrapper,将 view 设置为 dataTable 属性,例如

var table = new google.visualization.ChartWrapper({
  chartType: 'Table',
  containerId: 'table_div',
  dataTable: view
});

请参阅以下工作 sn-p...

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

function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['date', 'tag_id'],
    [new Date('2016-09-29 06:47:47'), '04:0f'],
    [new Date('2016-09-29 14:48:42'), '04:0f'],
    [new Date('2016-10-29 06:47:47'), '99:9n'],
    [new Date('2016-11-29 06:48:42'), '05:m8'],
  ]);

  var formatDate = new google.visualization.DateFormat({pattern: 'MMMM'});

  var dataGroup = google.visualization.data.group(
    data,

    // group by column
    [{
      column: 0,
      label: 'Month',
      modifier: function (val) {
        return formatDate.formatValue(val);
      },
      type: 'string'
    }],

    // agg columns
    [{
      aggregation: google.visualization.data.count,
      column: 1,
      label: 'Tag Count',
      type: 'number'
    }]
  );

  var view = new google.visualization.DataView(dataGroup);
  view.setRows([2, 1, 0]);

  var chart = new google.visualization.ChartWrapper({
    chartType: 'ColumnChart',
    containerId: 'chart_div',
    dataTable: view
  });
  chart.draw();

  var table = new google.visualization.ChartWrapper({
    chartType: 'Table',
    containerId: 'table_div',
    dataTable: view
  });
  table.draw();
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
<div id="table_div"></div>

【讨论】:

  • 仅供参考:this answer 有自定义排序表图表的提示...
  • 我不知道如何从一月到十二月订购月份,请帮助!!
  • 我可以根据月份对数据表进行排序,但是当我使用这些值并制作柱形图时,我会得到未排序的月份,看起来不太好。
  • 如何在 ChartWrapper 中嵌入 Dataview?我想只有嵌入 Datatable 而不是 Dataview 的选项。
  • 使用时出现“无法绘制图表:未指定数据”的错误
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2021-07-08
相关资源
最近更新 更多