来自PHP的Flot图表

时间:2018-09-20 18:58:13

标签: javascript php mysql flot

我试图用数据库中的值制作浮点图。现在,图表仅显示1个数据点。我如何获得它来绘制数组中的其余数据?我正在尝试绘制每个日期输入的座席总数。 var data2将用于丢失的座席

    <?php

  foreach($mysqli->query('SELECT COUNT(*), agent_date_entered, agent_id 
  FROM agents GROUP BY agent_date_entered 
  ORDER BY agent_date_entered') as $row) {

    $count[] = $row['COUNT(*)'];
    $agent[] = $row['agent_id'];
    $date[] = $row['agent_date_entered'];

  }

?>

  <script>

  var data,data1,options,chart;
  var data1 = [ <?php echo json_encode($count); ?>, <?php echo json_encode($date); ?> ];
  var data2 = [  ];

  data = [{ data:data1, label:"Agents Gained", lines:{show:true}, points:{show:true}}
        ,{ data:data2, label:"Agents Lost", lines:{show:true}, points:{show:true}}];
  options = {legend:{position:"nw"}};
  $(document).ready(function(){
    chart = $.plot($("#placeholder"),data,options);
  });

  </script>

2 个答案:

答案 0 :(得分:0)

您的数据格式不是Flot所需要的。您需要类似

的东西
[[1, 1533081600000], [1, 1535932800000]]

(或[[1533081600000, 1], [1535932800000, 1]](如果要在x轴上显示日期)。
1535932800000这样的数字是JavaScript时间戳。您还需要轴上带有日期/时间值的选项mode: 'time'

有关更多信息,请参见Data formatTime series data下的文档。

答案 1 :(得分:0)

借助指向Data formatTime series data的注释之一中的链接,我找到了所需的答案。

以防万一其他人遇到这个问题,这就是我的工作方式。首先,我将sql语句中的日期更改为:(UNIX_TIMESTAMP(agent_date_depart)*1000) AS date。然后,在设置变量$depart = json_encode(floatval($row['date']));时对其进行了编码。为了使其在x轴上不是一个很大的数字并显示为日期,我将x轴设置为:xaxis: {mode: "time", timeformat: "%Y/%m/%d"},。您甚至可以使用如下所示的tooltipOpts在工具提示中设置日期格式:

    tooltipOpts: {
        content: function (label, x, y) {
            var date = new Date(+x);
            var tooltip = '<h4>' + label + '</h4><ul>';
            tooltip += '<li>Date ' + date.toLocaleDateString() + '</li>';
            tooltip += '<li>Total Count: ' + y + '</li></ul>';
            return tooltip;
        },

我发现将数据显示在图表中的最简单方法是将sql语句放在数据变量中,如下所示:

        var d2 = [

<?php

         $sql = "SELECT COUNT(agent_id), (UNIX_TIMESTAMP(agent_date_depart)*1000) AS date FROM agents
          WHERE agent_date_depart BETWEEN '$bdatecy' AND '$edatecy'
          GROUP BY agent_date_depart ";
          $result = mysqli_query($mysqli, $sql);
           while ($row = mysqli_fetch_assoc($result)) {

    $agent = $row['COUNT(agent_id)'];
    $depart = json_encode(floatval($row['date']));

    echo "[".$depart.", ".$agent."],";
  }

?>

  ];

希望这会有所帮助,我想再次感谢您提供这些链接。