2013-07-29 11 views
15

Generuję wykresy Google i utknąłem tutaj. Google pozwala na układanie kolumn w stosy. Ale jest ograniczona albo nie mogę skonfigurować jej do pracy. Zrobione z Google, tutaj jest przykład pokazujący liczbę filiżanek kawy produkowanej w każdym roku do dwóch krajów:skumulowany wykres kolumnowy dla dwóch zestawów danych - wykresy Google

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

Say mam inny zestaw danych dla tych samych dwóch krajach, ale tym razem mam kawy rozpuszczalnej zamiast ziemi. Przykład:

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

Co chciałbym zrobić, to stos tych dwóch zestawów danych na szczycie siebie. Tak więc każda kolumna byłaby jednym krajem, ale dwiema działami: fasolą i kawą rozpuszczalną.

myślałem, czy istnieje sposób formatowania tabeli danych w następujący sposób:

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

wygenerować coś

enter image description here

Twoja pomoc jest mile widziana.

+0

Cześć, można użyć Combo wykresu https://google-developers.appspot.com/chart/interactive/docs/gallery/combochart, –

+0

Nie wiem, jak to robi Praca? – mavili

+0

Witam, przejrzałem tutaj https://developers.google.com/chart/image/docs/gallery/bar_charts, tutaj w typach wykresów, sprawdź za pomocą typu wykresu bvo, może pomóc ci więcej –

Odpowiedz

15

Właśnie wpadłem na ten sam problem dzisiaj i poszedłem za twoim linkiem do zgłoszenia. Wydaje się, że niedawno ktoś odpowiedział następująco:.

„To jest rzeczywiście możliwe z nowym wykresie Materiał bar (choć w nieco okrężną drogą) w nowym wykresie, jeśli uczynić wykres ułożone, ale umieść kilka serii na innej osi, co tworzy oddzielny stos dla tej serii . Niestety, obecnie nie ma sposobu, aby całkowicie ukryć oś, a będziesz musiał jawnie ustawić okno podglądu na . opcje ukrywania osi i wyrównania okien widoku, ale na razie będzie to konieczne. "

Ten skrzypce wydawało mi pomóc rozwiązać ten problem: http://jsfiddle.net/p7o0pjgg/

Oto kod:

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

Rzeczywiście widziałem twoją odpowiedź właśnie teraz;) tylko dlatego, że od niedawna odsunąłem się od tego wymogu i nie zdawałem sobie sprawy, że istnieje nowa odpowiedź na to pytanie ponad rok temu! Ale skrzypce są wystarczającym dowodem, że tak naprawdę jest rozwiązaniem. dzięki – mavili

+0

Czy to możliwe z najnowszą wersją biblioteki? Powyższy kod nie zadziała z aktualną wersją –

+0

@Julien Uważam, że nadal działa w zasadzie. Podany przykład JSFiddle może mieć niewielki błąd uniemożliwiający działanie. Zobacz moją odpowiedź poniżej dla kopii roboczej. –

4

Interfejs API wizualizacji nie obsługuje tworzenia wielu stosów kolumn w wierszu danych. Możesz zrobić feature request, aby dodać obsługę tego, jeśli chcesz.

+0

dzięki mate, właśnie przesłano prośbę o funkcję. Będzie tak fajnie, jeśli dodadzą to. – mavili

+1

Oto link do żądania: [wiele skumulowanych wykresów słupkowych] (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% 20Podsumowanie% 20Stars) – mavili

0

Odpowiedź Dan Hogan pracował dla mnie. Jednak przykład JSFiddle nie działa (nie wiem, dlaczego.) Oto wersja, która działa dla mnie.

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>

Powiązane problemy