Laravel和Charting - 确定数据时间之间的差异

时间:2014-01-28 19:20:20

标签: php charts highcharts laravel google-visualization

我一直在尝试使用Highcharts库创建一个类似于http://bit.ly/1jF6AY7的图表几周。但是,它不理解以下系列应该有零值(如果没有提供值/日期):

12-18-13
01-01-14 
01-03-14 
01-06-14
01-15-14

然而,显然使用谷歌图表是可能的,因为上图显示了“贡献”日期之间的差距。我需要为我的created_at日期做同样的事情。有什么建议?我更喜欢使用Highcharts这样做,但此时我的压力和头发比其他任何东西都更有价值;)

Vanilla PHP代码示例:

        $q = $_GET['search'];

        if(isset($_GET['time'])) {
            $time = $_GET['time'];
        } else {
            $time = NULL;
        }

        include_once('../../vendors/HighchartsPHP-master/Highchart.php');

        $chart = new Highchart(Highchart::HIGHSTOCK);
        $chart->includeExtraScripts();

        $chart->chart->renderTo = "chart";
        $chart->title->text = "Potential Impact for \${$q}";
        $chart->rangeSelector->selected = 1;
        $chart->xAxis->type = 'datetime';
        $chart->xAxis->gapGridLineWidth = 3;
        $chart->xAxis->dateTimeLabelFormats->hour = "%H:%M";
        $chart->xAxis->dateTimeLabelFormats->month = "%e. %b";
        $chart->xAxis->dateTimeLabelFormats->year = "%b";
        // $chart->xAxis->tickInterval = 3600 * 1000;
        $chart->yAxis->title->text = "Volume";
        $chart->yAxis->min = 0;
        $chart->credits->enabled = false;

        // $chart->rangeSelector->buttons[] = array(
        //     'type' => "minute",
        //     'count' => 5,
        //     'text' => "5"
        // );
        ...

        $chart->rangeSelector->buttons[] = array(
            'type' => "month",
            'count' => 6,
            'text' => "6M"
        );

        $chart->rangeSelector->buttons[] = array(
            'type' => "year",
            'count' => 1,
            'text' => "1Y"
        );

        $chart->rangeSelector->buttons[] = array(
            'type' => "all",
            'text' => "All"
        );

        $option = new HighchartOption();
        $option->global->useUTC = false;
        Highchart::setOptions($option);

        $chart->series[] = array(
            'name' => "Potential Impact for \${$q}",
            'data' => new HighchartJsExpr("data"),
            'step' => 1,
            'gapSize' => 5,
            'connectNulls' => false,
            'tooltip' => array(
                'valueDecimals' => 0
            )
        );
        $data = format_data($q, $time);
        $chart->series[0]->data = $data;

        ?>

    <div id="chart"></div>
    <script type="text/javascript"><?php echo $chart->render("chart1"); ?></script>

并且,格式数据功能:

function format_data($q, $time = NULL) {
    $msg_vol = correlate_created_at_with_msg_vol($q, $time);

    while ($tweet = mysqli_fetch_array($msg_vol, MYSQL_ASSOC)) {
        $date = $tweet['date'] * 1000;
        $count = intval($tweet['count']);
        $formatted[] = array($date, $count);
    }
    return $formatted;
}

enter image description here

在上图中,您不仅可以看到图形化单个数据点(如工具提示所示)而没有在图表上显示任何视觉参考,但它正在跳过空白周期,而不是正确显示相应的时间在xAxis上。奇怪的是,如果您引用底部栏,允许用户通过拖动栏来更改时间段...该栏的间隙已正确显示,就像我正在寻找的那样。

如果我不能让Highcharts为间隙找到零值,我至少需要它显示时间间隔而不会跳过不可预测的分钟数,小时数,在某些情况下,天数和周。

2 个答案:

答案 0 :(得分:1)

如果您使用基于日期时间的系列,并且高层图表不应处理这些点的数据。如果没有看到您的代码,我就会在基于类别的xAxis上进行操作,并且您不会在此时段中“分箱”任何数据。

编辑: 快速浏览一下您粘贴的代码就会显示您正在使用HighStock,这很好。您可以使用ordinal设置。将其设置为false,您应该看到差距。现在仍然很难说,因为我无法看到你的数据是什么,但这应该给我们一些东西继续下去。您可能还想启用connectNulls

答案 1 :(得分:-1)

简易解决方案,如果没有数据,则强制为0。