Генерация старшей диаграммы на основе выходных данных массива - PullRequest
1 голос
/ 24 марта 2012

ОБНОВЛЕНИЕ Я обновил свой код в ответ на комментарии @MichaelRushton. Сейчас я использую Highcharts, но у меня возникают проблемы с выводом данных в ряд данных.

Теперь у меня есть следующий массив, сгенерированный из запроса MySQL, и я хотел бы вывести его в линейную диаграмму. Моя ось Y должна содержать сумму, ось X - это диапазон дат, а легенда - это различные элементы, нанесенные на график.

   // Call the stored procedure
   $stmt->execute();                    

   while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
       $array[$row['legend']][$row['date']] = $row['amount'];
       //print_r($array);
   }


   chart = new Highcharts.Chart({

   chart: {
     renderTo: 'container',
     type: 'line'
   },

   xAxis:
   {
    categories: [2012-03-01, 2012-03-02, 2012-03-03, 2012-03-04, 2012-03-05, 2012-03-06, 2012-03-07, 2012-03-08, 2012-03-09, 2012-03-10, 2012-03-11, 2012-03-12, 2012-03-13, 2012-03-14, 2012-03-15, 2012-03-16, 2012-03-17, 2012-03-18, 2012-03-19, 2012-03-20, 2012-03-21, 2012-03-22, 2012-03-23, 2012-03-24, 2012-03-25, 2012-03-26, 2012-03-27, 2012-03-28, 2012-03-29, 2012-03-30, 2012-03-31],
   },

   series:
   [

<?php
     foreach ($array as $legend => $data)
         {
           echo '{';
           echo "name: '" . $legend . "',";

           $values = array();

           for ($i = 1; $i <= 31; ++$i)
           {
             $values[] = isset($data[$i]) ? $data[$i] : 0;
           }

           echo 'data: [' . implode(', ', $values) . '],';
           echo '},';

         }
?>
],
 }
 );

<div id="container" style="width: 100%; height: 400px"></div>
) 

Этот код предоставляет мне следующий вывод:

series: [ {name: 'Something Tastier',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],},{name: 'Something Tasty',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],}, ], } );

Кажется правильным, за исключением того, что значения не выводятся в ряд данных. Если у кого-то есть какие-либо дальнейшие идеи, это будет высоко оценено.

Ответы [ 3 ]

1 голос
/ 24 марта 2012

Highcharts - мой любимый вариант для графиков.Возможно, стоит структурировать ваш массив так, чтобы он выглядел следующим образом:

Array (

  [legend_one] => Array
  (

    [2012-03-01] => 100
    [2012-03-02] => 200
    [2012-03-03] => 300
    ...

  )

  [legend_two] => Array
  (

    // Day of the month    
    [2012-03-01] => 100
    [2012-03-02] => 200
    [2012-03-03] => 300
    ...

  )

  ...

)

Затем вы можете использовать Highcharts следующим образом:

Редактировать: Теперь используется полная дата, а не просто деньсделал месяц динамическим (используя переменную $start) и запустил итератор дня с 0, а не с 1, чтобы устранить необходимость в $i - 1 при использовании strtotime для обработки следующей даты.

chart = new Highcharts.Chart({

  xAxis:
  {

    categories: [

<?php

      // You could dynamically set this date using $_GET/$_POST
      $start = '2012-03-01';

      $dates = array();

      for ($i = 0, $days = date('t', strtotime($start)); $i < $days; ++$i)
      {
        $dates[] = date('Y-m-d', strtotime($start . ' + ' . $i . ' day'));
      }

      echo "'" . implode("', '", $dates) . "'";

?>

    ],

  },

  series:
  [

<?php

    foreach ($array as $legend => $data)
    {

      echo '{';

      echo "name: '" . $legend . "',";

      $values = array();

      for ($i = 0; $i < $days; ++$i)
      {

        $date = date('Y-m-d', strtotime($start . ' + ' . $i . ' day'));

        $values[] = isset($data[$date]) ? $data[$date] : 0;

      }

      echo 'data: [' . implode(', ', $values) . '],';

      echo '},';

    }

?>

  ],

}
);
0 голосов
/ 24 марта 2012

Вы идете не в ту сторону.Если вы ищете что-то, что уже доступно, вы должны вывести данные таким образом: они принимают .Не наоборот.

С учетом сказанного, попробуйте pChart .Имеет широкую поддержку различных форматов.

0 голосов
/ 24 марта 2012

Вам нужно преобразовать вывод php массива, используя полезные старшие чарты, используя. Попробуйте json_encode. И посмотрите здесь http://code.google.com/p/highchartwrapper/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...