Highchart的x轴未显示正确的数据

时间:2016-04-17 11:47:44

标签: javascript php mysql highcharts

我有一个名为monthly flagged的表格,其结构如下:

id
month
year
total_flagged

它的工作方式是,当一个帖子被标记时,它将检查当前的月份和年份,如果数据库中存在年份,它将仅+1总标记,否则它将创建一个新的行。例如,目前我的数据库中有1行:

id: 1
month: April
year: 2016
total_flagged: 28

如果用户在5月1日标记了帖子,则会为month: May生成一个新行。

现在,我正在尝试在Highchart上显示这些数据。 y-xis显示标记的帖子数,而x轴显示月份。在表格中有一行,图表显示如下:

enter image description here

哪个好。虽然理想情况下我希望将所有月份都放在最底层,但表中存在的月份只会显示数据。

然而,当表中存在多行时,问题就开始了。如果我同时拥有4月和5月的数据(表格中有2行),则图表显示如下:

enter image description here

x轴上显示的数字10是4月份的total_flagged

以下是我存储数据的方式:

$statement = mysqli_prepare ($connect, "SELECT * FROM monthly_flagged");
mysqli_stmt_execute($statement);
$months = array();
$data = array();
$result = mysqli_stmt_get_result($statement);
while($get_data = mysqli_fetch_assoc ($result)){
    $months[]          = $get_data['month'];
    $data[]            = $get_data['total_flagged'];
}
mysqli_stmt_close($statement);

在我的JavaScript for Highcharts上:

xAxis: {
    categories: [<?php echo json_encode($months); ?>]
},

series: [{
            name: 'Flagged posts',
            data: [<?php echo json_encode($data); ?>]
        } 

修改

当前的PHP代码:

<?php
$statement = mysqli_prepare ($connect, "SELECT * FROM monthly_flagged");
mysqli_stmt_execute($statement);
$months = array();
$data = array();
$result = mysqli_stmt_get_result($statement);
while($get_data = mysqli_fetch_assoc ($result)){
    $months[]          = $get_data['month'];
    //$data[]            = $get_data['total_flagged'];
    $data[] = $get_data['total_flagged'][0];
}

mysqli_stmt_close($statement);
?>

Highcharts的JavaScript(完整版):

<script>
$(function () {
    $('#container').highcharts({
        title: {
            text: 'Flagged Posts',
            x: -20 
        },
        xAxis: {
            categories: <?php echo json_encode($months); ?>
        },

        yAxis: {
            format: '',
        },
        yAxis: {
            title: {
                text: 'Number of flagged posts',
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            valueSuffix: ''
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            borderWidth: 0
        },
        series: [{
            name: 'Flagged posts',
            data: <?php echo json_encode($data); ?>
        }]
    });
});
</script>

当前图表:

enter image description here

1 个答案:

答案 0 :(得分:2)

存储数据:

$statement = mysqli_prepare ($connect, "SELECT * FROM monthly_flagged");
mysqli_stmt_execute($statement);
$months = array();
$data = array();
$result = mysqli_stmt_get_result($statement);
while($get_data = mysqli_fetch_assoc ($result)){
    $months[]          = $get_data['month'];
    $data[]            = $get_data['total_flagged'];
}
mysqli_stmt_close($statement);

类别和系列图表选项:

xAxis: {
categories: <?php echo json_encode($months); ?>
}

series: [{
        name: 'Flagged posts',
        data: <?php echo json_encode($data); ?>
}