stacked column chart for two data sets - Google Charts

只愿长相守 提交于 2019-11-26 18:18:36

问题


I'm generating some Google Charts and I'm stuck here. Google allows you to have your columns stacked. But it's either limited or I can't configure it to work. Taken from Google, here is an example showing number of cups of coffee produced in each year for two countries:

Say I have another data set for the same two countries, but this time I have instant coffee instead of ground. Example:

What I'd like to do is to stack these two datasets on top of each other. So each column would be a single country, but two divisions: bean and instant coffee.

I was thinking if there was a way of formatting the data table in the following way:

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

to generate something like

Your help is appreciated.


回答1:


I just ran into this same issue today and followed your submission link. It seems that just recently someone replied with this:

"This is actually possible with the new Material Bar chart (albeit in a somewhat roundabout way). In the new chart, if you make a chart stacked, but place some series on a different axis, that creates a separate stack for those series. Unfortunately, there is currently no way to completely hide an axis yet, and you will have to explicitly set the view window. Eventually we will introduce options to hide axes and to align view windows, but this will have to do for now."

This fiddle seemed to help me solve this problem: http://jsfiddle.net/p7o0pjgg/

Here's the code:

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)); }; 



回答2:


The Visualization API does not support creating multiple column stacks per row of data. You can make a feature request to add support for this if you want.




回答3:


The answer by Dan Hogan worked for me. However, the JSFiddle example didn't seem to work (not sure, why.) Here is a version that works for me.

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>



回答4:


You can do it using a stacked column chart, where all data series of one group (e.g. ground coffee) is on the left axis, and all data series of the other group on the right axis (instant coffee).

data and stacked column chart set-up

series of group 2 moved to right axis



来源:https://stackoverflow.com/questions/17925722/stacked-column-chart-for-two-data-sets-google-charts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!