首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级图表-解析json系列

高级图表-解析json系列
EN

Stack Overflow用户
提问于 2014-01-03 19:23:29
回答 2查看 1.5K关注 0票数 0

我用它来绘制列高图小提琴我用它来gt:

代码语言:javascript
复制
<?php
    $query = mysql_query("SELECT
                                sales_raport_all.from_date,
                                sales_raport_all.to_date,
                                sales_raport_all.konto,
                                SUM(sales_raport_all.saldo_sprzedazy),
                                SUM(sales_raport_all.wartosc_kosztowa),
                                SUM(sales_raport_all.marza),
                                klienci_ax_all.sales_group,
                                klienci_ax_all.nazwa
                            FROM
                                sales_raport_all
                            INNER JOIN
                                klienci_ax_all
                            ON
                                sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
                            WHERE
                                YEAR(from_date) = YEAR(CURDATE())
                            GROUP BY
                                sales_raport_all.from_date,
klienci_ax_all.sales_group
                            ORDER BY
                                sales_raport_all.from_date,
klienci_ax_all.sales_group");

$raw = array();
$dates = array();
while ($r = mysql_fetch_array($query)) {
$date = $r['from_date'];
if (!in_array($date, $dates)) $dates[] = $date;
$sales_group = $r['sales_group'];
$raw[$sales_group][$date] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}
$data = array();
$data[0] = array('name' => "Date", 'data' => $dates);
foreach ($raw as $name => $d) {
$new_data = array('name' => $name, 'data' => array());
foreach ($dates as $date) {
    $new_data['data'][] = isset($d[$date]) ? $d[$date] : 0;
}
$data[] = $new_data;
}

print json_encode($data);

我用小提琴

代码语言:javascript
复制
chart3Options.series[0] = json[1];
...

是否有一种简单的方法来定义json中的所有数据?这个数据是可变的,如果我声明了11个变量,并且只有7个变量,那么图表将不会在一个日期绘制JSON输出:

代码语言:javascript
复制
[{"name":"Date","data":["2014-01-01"]},{"name":"IN","data":[2580]},{"name":"KD","data":[5030]},{"name":"\u0141S","data":[12628]},{"name":"NN","data":[400]},{"name":"SG","data":[12979]},{"name":"TD","data":[15096]}]

//编辑

我创建新文件:

代码语言:javascript
复制
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Highcharts Example</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function() {
            var options = {
                chart: {
                    renderTo: 'container',
                    type: 'column',
                    marginRight: 130,
                    marginBottom: 25
                },
                title: {
                    text: 'test',
                    x: -20 //center
                },
                subtitle: {
                    text: '',
                    x: -20
                },
                xAxis: {
                    categories: []
                },
                yAxis: {
                    title: {
                        text: 'test'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                },
                tooltip: {
                    formatter: function() {
                            return '<b>'+ this.series.name +'</b><br/>'+
                            this.x +': '+ this.y;
                    }
                },
                legend: {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'top',
                    x: -10,
                    y: 100,
                    borderWidth: 0
                },
                series: []
            }

            $.getJSON("test2.php", function(json) {
                options.xAxis.categories = json[0]['category'];
                options.series[0] = {};
                options.series[0].name = json[0]['name'];
                options.series[0].data = json[0]['data'];
                chart = new Highcharts.Chart(options);
            });
        });
        </script>
        <script src="http://code.highcharts.com/highcharts.js"></script>
        <script src="http://code.highcharts.com/modules/exporting.js"></script>
    </head>
    <body>
        <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
    </body>
</html>

test2.php

代码语言:javascript
复制
<?php
        $db_host        = '******';
        $db_user        = '******';
        $db_pass        = '******';
        $db_database        = '******';

        $link = mysql_connect($db_host,$db_user,$db_pass) or die('Nawiązanie połączenia z bazą danych nie było możliwe');

        mysql_select_db($db_database,$link);
        mysql_query("SET names UTF8");

        $query = mysql_query("SELECT
                                    sales_raport_all.from_date,
                                    sales_raport_all.to_date,
                                    sales_raport_all.konto,
                                    SUM(sales_raport_all.saldo_sprzedazy),
                                    SUM(sales_raport_all.wartosc_kosztowa),
                                    SUM(sales_raport_all.marza),
                                    klienci_ax_all.sales_group,
                                    klienci_ax_all.nazwa
                                FROM
                                    sales_raport_all
                                INNER JOIN
                                    klienci_ax_all
                                ON
                                    sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
                                WHERE
                                    YEAR(from_date) = YEAR(CURDATE())
                                GROUP BY
                                    sales_raport_all.from_date,
    klienci_ax_all.sales_group
                                ORDER BY
                                    sales_raport_all.from_date,
    klienci_ax_all.sales_group");


$result = array();



while($r = mysql_fetch_array($query)) {
     $grupa = $r['sales_group'];
     $datetime = $r['from_date'];
     $result['name'][] = $datetime;
     $result['category'][] = $grupa;
     $result['data'][] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}

$json = array();
array_push($json,$result);
print json_encode($json);

?>

JSON给我:

代码语言:javascript
复制
[{"name":["2014-01-01","2014-01-01","2014-01-01","2014-01-01","2014-01-01","2014-01-01"],"category":["IN","KD","\u0141S","NN","SG","TD"],"data":[2580,5030,12628,400,12979,15096]}]

系列看起来很棒,但我不知道如何更改类别,比如http://jsfiddle.net/rubJS/

EN

回答 2

Stack Overflow用户

发布于 2014-01-03 20:03:00

你可以用javascript来处理它。换句话说,不是为每个<x,y>对定义变量,而是返回数据并让javascript构造系列。例如,给定当前输出,您可以在单独的数组中准备X和Y值(在javascript中),并编写一个函数将这些值推入序列。可以这样做(以jQuery为例):

代码语言:javascript
复制
function build_chart(x_values, y_values, options)
{
   jQuery.each(x_values, function(item) {
        options.xAxis.categories.push(x_values[item]);
    });

    var series = {
        data: []
    };

    jQuery.each(y_values, function(item) {
        series.data.push(parseInt(y_values[item]));
    });

    options.series.push(series);
    chart = new Highcharts.Chart(options);

    return chart;

} 

其中变量options定义了一个没有series成员的图表模板(由上面的函数添加)

编辑

按照问题中的编辑,下面是支持它的jsFiddle。注意,JSON中的数据表示为数组。每个数组中的第一个元素对应于第一个类别,每个数组中的第二个元素对应于第二类等等。

票数 1
EN

Stack Overflow用户

发布于 2014-01-06 10:52:29

除了不正确的json格式(所提到的)之外,您还需要将日期按为高级图表中的分类,或者使用日期时间类型的轴,然后将日期解析为时间戳。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20911201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档