Как динамически генерировать диаграмму из диаграммы Google - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь реализовать график по следующей ссылке http://code.google.com/apis/chart/interactive/docs/gallery/areachart.html

Ниже приведен фрагмент кода, взятый из файла phtml,

$ sale имеет массив как,

Array
(
    [0] => 19.92
    [1] => 159.15
    [2] => 374.96
    [3] => 319.5
    [4] => 237
)

$ месяц имеет массив, как,

Array
(
    [0] => 7
    [1] => 8
    [2] => 9
    [3] => 10
    [4] => 11
)

Ниже скрипт будет генерировать диаграмму на основе значения массива

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
        var sale_arr = <?php echo json_encode($sale); ?>;
        var month_arr = <?php echo json_encode($months); ?>;
        alert(month_arr)
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Month');
        data.addColumn('number', 'Sales');
        //data.addColumn('number', 'Expenses');
        var result = '';
         for(var i=0; i<month_arr.length; i++) {
          result += '["'+month_arr[i]+'",' +sale_arr[i]+'],';
         }     
        alert(result);  
        data.addRows([
          result
        ]);

        var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
        chart.draw(data, {width: 400, height: 240, title: 'Order',
                          hAxis: {title: 'Year', titleTextStyle: {color: '#FF0000'}}
                         });
      }
    </script>

Мне нужно сформировать такие значения, как

data.addRows([
  ['4', 1000,
  ['5', 1170],
  ['6', 660],
  ['7', 1030]
]);

в моем сценарии result будет генерировать ["7",19.92],["8",159.15],["9",374.96],["10",319.5],["11",237],. Также я добавил результат как

    data.addRows([
      result
    ]);

Это приведет к ошибке в скрипте. Что я сделал не так с этим кодом. Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Ваш результат var дает вам дополнительную запятую, сообщающую коду, что есть другое значение, когда на самом деле нет

var result = '';
for(var i=0; i<month_arr.length; i++) {
    result += '["'+month_arr[i]+'",' +sale_arr[i]+'],';
}     
result = result.substring(0, result.length - 1)
alert(result); 
0 голосов
/ 02 мая 2014

Я думаю, что данный параметр функции AddRows должен быть массивом, а не строкой.

Также вам следует удалить последнюю запятую, чтобы получить строку, которую можно интерпретировать в массив.

data.addRows(
      eval('[' + result.substring(0, result.length - 1) + ']')
    )

Но использование eval не лучший способ сделать это.Пока вы создаете данные result, вы можете создать массив вместо строки.Вот код:

var result = [];

for(var i=0; i<month_arr.length; i++) {
    result.push( [month_arr[i], sale_arr[i]] );
}    

data.addRows(result);
...