Search code examples
javascriptchartsgoogle-visualization

Google chart dont add row


For some reason i cant add any row, tried a lot of possibilities and still didnt worked.

Code below:

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

var dataChart1 = new google.visualization.arrayToDataTable();

dataChart1.addColumn('string', 'Mês');
dataChart1.addColumn('number', 'Fora Ponta');
dataChart1.addColumn('number', 'Geração Solar');

dataChart1 = addRows([
    ['JAN', $('#janConsumo').val(), 300],
    ['FEV', $('#fevConsumo').val(), 350],
    ['MAR', $('#marConsumo').val(), 400],
    ['ABR', $('#abrConsumo').val(), 350],
    ['MAI', $('#maiConsumo').val(), 300],
    ['JUN', $('#junConsumo').val(), 350],
    ['JUL', $('#julConsumo').val(), 350],
    ['AGO', $('#agoConsumo').val(), 450],
    ['SET', $('#setConsumo').val(), 400],
    ['OUT', $('#outConsumo').val(), 350],
    ['NOV', $('#novConsumo').val(), 300],
    ['DEZ', $('#dezConsumo').val(), 250]
]);

var optionsChart1 = {
    titlePosition: 'none',
    legend: {
        position: "bottom"
    },
    seriesType: 'bars',
    series: { 1: { type: 'line' } },
    height: 300,
    width: 800,
    colors: ['orange', 'red']
};    

chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(dataChart1, optionsChart1);

I have a button that calls this code.

The error that i got:

Uncaught Error: Data for arrayToDataTable is not an array.

Solution

  • for one, need to wait until google has finished loading.
    you can use the promise the load statement returns, see following snippet...

    google.charts.load('current', {
      packages: ['corechart']
    }).then(function () {
      var dataChart1 = new google.visualization.DataTable();
      dataChart1.addColumn('string', 'Mês');
      dataChart1.addColumn('number', 'Fora Ponta');
      dataChart1.addColumn('number', 'Geração Solar');
      dataChart1.addRows([
        ['JAN', $('#janConsumo').val(), 300],
        ['FEV', $('#fevConsumo').val(), 350],
        ['MAR', $('#marConsumo').val(), 400],
        ['ABR', $('#abrConsumo').val(), 350],
        ['MAI', $('#maiConsumo').val(), 300],
        ['JUN', $('#junConsumo').val(), 350],
        ['JUL', $('#julConsumo').val(), 350],
        ['AGO', $('#agoConsumo').val(), 450],
        ['SET', $('#setConsumo').val(), 400],
        ['OUT', $('#outConsumo').val(), 350],
        ['NOV', $('#novConsumo').val(), 300],
        ['DEZ', $('#dezConsumo').val(), 250]
      ]);
    
      var optionsChart1 = {
          titlePosition: 'none',
          legend: {
              position: "bottom"
          },
          seriesType: 'bars',
          series: { 1: { type: 'line' } },
          height: 300,
          width: 800,
          colors: ['orange', 'red']
      };
    
      chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
      chart.draw(dataChart1, optionsChart1);
    });
    

    also, in this situation, you'll want to use --> google.visualization.DataTable()

    not --> google.visualization.arrayToDataTable()

    see arrayToDataTable for more details...

    arrayToDataTable expects the data to be passed when it is called.