【问题标题】:Highcharts and Json dataHighcharts 和 Json 数据
【发布时间】:2015-08-20 15:00:41
【问题描述】:

我最近一直在尝试学习使用 Highctarts.js,但遇到了一个小问题。

当我使用他们的示例代码和他们的示例 data.json 文件时,它可以工作。但是,当我用我自己的替换他们的 json 文件时它不起作用,我做错了什么?

Highchart JS

$(document).ready(function() {

    var options = {
        chart: {
            renderTo: 'container',
            type: 'spline'
        },
        series: [{}]
    };

    $.getJSON('data.json', function(data) {
        options.series[0].data = data;
        var chart = new Highcharts.Chart(options);
    });
});

Highchart data.json

[
[1,12],
[2,5],
[3,18],
[4,13],
[5,7],
[6,4],
[7,9],
[8,10],
[9,15],
[10,22]
]

这会成功生成页面加载图表。

我的代码没有,有什么问题吗?

我的 JS(与上面的 Highchart.js 完全相同,只是替换了 json 文件)

$(document).ready(function() {

    var options = {
        chart: {
            renderTo: 'container',
            type: 'spline'
        },
        series: [{}]
    };

    $.getJSON('results.json', function(data) {
        options.series[0].data = data;
        var chart = new Highcharts.Chart(options);
    });
});

我的结果.json

[
  {
    "Month": "January",
    "Count": 162690
  },
  {
    "Month": "February",
    "Count": 109986
  },
  {
    "Month": "March",
    "Count": 145303
  },
  {
    "Month": "April",
    "Count": 116949
  },
  {
    "Month": "May",
    "Count": 253523
  },
  {
    "Month": "June",
    "Count": 51920
  }
]

我用来生成 json 的 monthConn.php 页面代码如下 - 也许我没有正确创建 results.json?;

$stmt = $conn -> prepare("SELECT 
                            MONTHNAME(TimeStamp), direction, COUNT(*)
                        FROM
                            transactions
                                WHERE TimeStamp BETWEEN '2014-01-01' AND '2014-12-31'
                        GROUP BY EXTRACT(MONTH FROM TIMESTAMP);");

$stmt -> execute();

$stmt -> bind_result($month, $count);

while ($stmt -> fetch()) {
$data[] = array(
            'Month' => $month,
            'Count' => $count
      );
    }

$stmt->close();

file_put_contents("results.json", json_encode(($data)));

最好是条形图

  • 底部的月份(x 轴)

  • 向左计数(y 轴)

某事like this

【问题讨论】:

  • 这是因为 HC 等待一个数组数组,而您正在发送一个对象数组。如果用php返回json,使用json_decode($json, true);
  • 数组数据被视为一组坐标对 [x, y],这就是它在没有任何额外图表配置的情况下工作的原因。如果您想使用其他数据格式,您应该相应地配置图表。换句话说,你的数据没问题,你的图表配置不行。
  • 这是我从您的帖子中看到的猜测。也许@IgorDymov 的答案比我的更正确
  • @johnny_s 因为 HighCharts 是非常灵活的工具,我不知道您要达到什么目标。您的图表应该是什么样子?
  • @johnny_s,目前您只有 Out 数据,对吧? (Direction: O)

标签: javascript jquery json highcharts


【解决方案1】:

我又看了一遍,发现 Highchart 选项的格式不正确。

我在这里创建了一个工作示例。 http://jsfiddle.net/z9mgt4r6/

$(function () {
    $.getJSON('http://mockbin.org/bin/bd057e57-36e7-4d24-a238-32d19fc23d2c', function (data) {
        var options = {
            title: {text: 'Title'},
            subtitle: {text: 'Subtitle'},
            xAxis: {categories: []},
            yAxis: {title: {text: 'Count'}},
            series: [{name: 'Count', data: []}]
        };
        for (var i = data.length - 1; i >= 0; i--) {
            options.xAxis.categories.push(data[i].Month);
            options.series[0].data.push(data[i].Count);
        };
        $('#container').highcharts(options);
    });
});

【讨论】:

  • 它解决了您的问题吗?这是一个简单的 for 循环 w3schools.com/js/js_loop_for.asp 我创建了一个新数组来放置我们的项目,每个月在 results.json 中插入一个新数组 z[i] = [i+1, count]
  • 对不起,我应该从一开始就提供一个 jsfiddle,我已经用一个工作示例更新了答案
  • 感谢 Edward,但您的示例似乎不起作用。没有图表显示。
  • 您的 JSON 是正确的,jsfiddle 在 Chrome 中效果最好 i.imgur.com/N2kCxQU.png
  • 谢谢。为什么x轴是倒序的?
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多