2013-07-29 78 views
15

我生成一些谷歌图表,我卡在这里。 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

您的帮助表示赞赏。

+0

嗨,你可以使用组合图表https://google-developers.appspot.com/chart/interactive/docs/gallery/combochart, –

+0

我不知道怎么,做工作? – mavili

+0

嗨,看看这里https://developers.google.com/chart/image/docs/gallery/bar_charts,在这里的图表类型,检查与bvo图表类型,它可以帮助你更多 –

回答

15

我今天刚刚遇到同样的问题,并关注您的提交链接。看来,刚刚有人回复说了:

“这实际上是可能与新材料条形图(尽管 有点迂回的方式)在新的图表,如果你犯了一个图表 堆叠,但是将一些系列放置在不同的轴上,这会为这些系列创建一个单独的堆栈。不幸的是,目前还没有 方法可以完全隐藏轴,并且您必须明确地设置 设置视图窗口。最终,我们将介绍选项隐藏轴 并对齐视图窗口,但现在必须做。“

这拨弄似乎帮助我解决这个问题: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)); 
}; 
+0

我刚刚看到了你的答案;)因为我刚刚离开那个要求,并没有意识到有一个一年多以前的新答案!但小提琴已经足够证明它实际上是解决方案。谢谢 – mavili

+0

图书馆的最新版本还有可能吗?上面的代码将无法与当前版本 –

+0

@ Julien我相信它仍然在原则上工作。提供的JSFiddle示例可能有一个小错误,阻止它的工作。看到我的答案下面的工作副本。 –

4

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

+0

谢谢队友,刚刚提交了一个功能请求。如果他们真的添加这个,它会很酷。 – mavili

+1

以下是指向请求的链接:[multiple stacked bar charts](http://code.google.com/p/google-visualization-api-issues/issues/detail?id=1270&q=multiple%20stacked%20bar%20charts&sort = owner&colspec = ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary%20Stars) – mavili

0

丹霍根答案为我工作。然而,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>