两个数据集的堆积柱形图 - Google Charts

时间:2013-07-29 13:44:53

标签: charts google-visualization stacked

我正在生成一些谷歌图表,我被困在这里。 Google允许您将列堆叠起来。但它有限或我无法配置它工作。以谷歌为例,这里有一个例子,显示了两个国家每年生产的咖啡杯数量:

number of cups of BEAN COFFEE per year for Austria and Belgium

说我有相同的两个国家的另一个数据集,但这次我有速溶咖啡而不是地面。示例:

number of cups of INSTANT COFFEE per year for Austria and Belgium

我想做的是将这两个数据集叠加在一起。所以每个专栏都是一个国家,但有两个部门:豆类和速溶咖啡。

我在想是否有办法以下列方式格式化数据表:

['Year', 'Austria', 'Austria (instant)', 'Bulgaria', 'Bulgaria (instant')],
['2003', 1736060, 10051, 250361, 68564],
['2004', 1338156, 65161, 786849, 1854654],
['2005', 1276579, 65451, 120514, 654654]

生成类似

的内容

enter image description here

感谢您的帮助。

4 个答案:

答案 0 :(得分:16)

我今天刚遇到同样的问题,并按照您提交的链接进行操作。似乎最近有人回复了这个问题:

  

“这实际上可以使用新的材料条形图(虽然在   一种有点迂回的方式)。在新图表中,如果您制作图表   堆叠,但将一些系列放在不同的轴上,这会产生一个   这些系列的独立堆栈。不幸的是,目前没有   尚未完全隐藏轴的方法,你必须明确   设置视图窗口。最后,我们将介绍隐藏轴的选项   并对齐视图窗口,但现在必须这样做。“

这个小提琴似乎帮助我解决了这个问题:http://jsfiddle.net/p7o0pjgg/

以下是代码:

google.load('visualization', '1.1', {
    'packages': ['bar']
});
google.setOnLoadCallback(drawStuff);

function drawStuff() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Topping');
    data.addColumn('number', 'Nescafe Instant');
    data.addColumn('number', 'Folgers Instant');
    data.addColumn('number', 'Nescafe Beans');
    data.addColumn('number', 'Folgers Beans');
    data.addRows([
        ['2001', 321, 621, 816, 319],
        ['2002', 163, 231, 539, 594],
        ['2003', 125, 819, 123, 578],
        ['2004', 197, 536, 613, 298]
    ]);

    // Set chart options
    var options = {
        isStacked: true,
        width: 800,
        height: 600,
        chart: {
            title: 'Year-by-year coffee consumption',
            subtitle: 'This data is not real'
        },
        vAxis: {
            viewWindow: {
                min: 0,
                max: 1000
            }
        },
        series: {
            2: {
                targetAxisIndex: 1
            },
            3: {
                targetAxisIndex: 1
            }
        }
    };

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.charts.Bar(document.getElementById('chart_div'));
    chart.draw(data, google.charts.Bar.convertOptions(options));
};

答案 1 :(得分:4)

Visualization API不支持为每行数据创建多个列堆栈。如果需要,您可以feature request添加对此的支持。

答案 2 :(得分:1)

Dan Hogan的回答为我工作。但是,JSFiddle示例似乎不起作用(不确定,为什么。)这是一个适合我的版本。

google.charts.load('current', {'packages': ['bar']});
google.charts.setOnLoadCallback(function() {
    $('.service-usage-graph').each(function() {

        var table = new google.visualization.DataTable();
        table.addColumn('string', 'Date');
        table.addColumn('number', 'UL Peak');
        table.addColumn('number', 'UL Off-peak');
        table.addColumn('number', 'DL Peak');
        table.addColumn('number', 'DL Off-peak');

        table.addRow(['2001-01-01', 1, 2, 3, 4]);
        table.addRow(['2001-01-03', 3, 2, 4, 2]);
        table.addRow(['2001-01-04', 2, 2, 4, 2]);
        table.addRow(['2001-01-05', 0, 1, 4, 5]);
        table.addRow(['2001-01-06', 9, 2, 6, 8]);
        table.addRow(['2001-01-07', 2, 2, 7, 3]);
        var chart = new google.charts.Bar(this);
        var options = google.charts.Bar.convertOptions({
            isStacked: true,
            series: {
                2: { targetAxisIndex: 1 },
                3: { targetAxisIndex: 1 }
            },
            vAxis: {
              viewWindow: {
                max: 15,
              }   
            }   
        });
        chart.draw(table, options);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div class="service-usage-graph"></div>

答案 3 :(得分:0)

您可以使用<?php foreach($list as $value) { // change this line ?> <h4><?=sayName($value['name']);?></h4> <?php }?> 进行操作,其中一组的所有数据系列(例如,研磨咖啡)在左轴上,另一组的所有数据系列在右轴(即溶咖啡)上。

数据和堆积柱形图设置

enter image description here

第2组的系列移到右轴

enter image description here