1

我正在尝试使用数据库进行一些数据可视化。

起初我使用 morris.js,它对我的​​数据非常有效。稍后我会解释更多。我现在正在尝试使用 d3.js,因为我必须创建水平堆叠条、多条图表线等等……</p>

这是我的桌子:http ://d.pr/i/ooDN (我没有 10 名声望,我不能张贴我的照片)

我必须在图表上绘制 5 条不同的线。“Heure”是 x 轴,其他列是不同的行。

使用 morris,我的数据是这样的(.php 末尾的 JSON 中的 r_print[{"x":"1","a":"34","b":"15","c":"49","d":"15","e":"3"}, {"x":"2","a":"36","b":"13","c":"49","d":"12","e":"2"}, … ]

其中 x 是时间数据(和 x 轴,ae 字母是每个小时的其他线点。)

但是使用 d3.js,这些数组不再起作用,我必须更改我的 php 以获得这样的东西:

[{"x": 1, "y": 5}, { "x": 2, "y": 20}, { "x": 3, "y": 10}, … , { "x": 23, "y": 60}]

[{"x": 1, "y": 13}, { "x": 2, "y": 14}, { "x": 3, "y": 5}, … , { "x": 23, "y": 48}]

每行是不同的列。

这是我的 php:

<?php include 'connexion.php' ?>

<?php
////////////////// out_evo_tat   
$requete = $db->prepare('SELECT * FROM out_evo_tat');
$requete->execute();

while($row = $requete->fetch()) { 

    // $tableau[]=array('x'=>$row['Heure'],'a'=>$row['TAT_CHAINE'],'b'=>$row['TAT_PREA'],'c'=>$row['TAT_GLOBAL'],'d'=>$row['NBR_TESTS'], 'e'=>$row['NBR_TUBES'] );
    // $tableau[]=array($row['Heure'],$row['TAT_CHAINE'],$row['TAT_PREA'],$row['TAT_GLOBAL'],$row['NBR_TESTS'], $row['NBR_TUBES'] );

    $tableau[]= array (
        array($row['Heure'],$row['TAT_CHAINE']),
        array($row['Heure'], $row['TAT_PREA']),
        array($row['Heure'], $row['TAT_GLOBAL']),
        array($row['Heure'], $row['NBR_TESTS']),
        array($row['Heure'], $row['NBR_TUBES'])
        );  
}

echo json_encode($tableau);

?>

如何修改上面的代码以获得可用于 d3.js 的内容?

我想我必须使用嵌套循环,但我自己无法解决它......

我试图用最简单的方法来解释它,但正如我解释的那样,它可能很难理解,所以不要犹豫再问我更多。

谢谢

4

2 回答 2

0

我认为谷歌有很多 API 来创建图表......我发现了这个:Populating Data Using Server-Side Code

PS:我不是PHP程序员...我只知道一点。

我想它会帮助你...

于 2013-08-06T14:14:51.123 回答
0

一旦生成了如 PHP 代码所示的数组,以下代码将使用该数组生成 JSON 字符串数组:

array_unshift($tableau, null);
$tableau = call_user_func_array('array_map', $tableau);
$json = array();
foreach ($tableau as $key => $val){
    $out = array();
    foreach ($val as $key2 => $val2){
        $item = new stdClass;
        $item->x = $val2[0];
        $item->y = $val2[1];
        $out[] = $item;
    }
    $json[] = json_encode($out);
}
print_r($json);

输出:

Array
(
    [0] => [{"x":0,"y":35},{"x":1,"y":34},{"x":2,"y":36},{"x":3,"y":35}]
    [1] => [{"x":0,"y":10},{"x":1,"y":15},{"x":2,"y":13},{"x":3,"y":15}]
    [2] => [{"x":0,"y":45},{"x":1,"y":49},{"x":2,"y":49},{"x":3,"y":50}]
    [3] => [{"x":0,"y":10},{"x":1,"y":15},{"x":2,"y":12},{"x":3,"y":5}]
    [4] => [{"x":0,"y":2},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":1}]
)
于 2013-08-06T14:47:29.320 回答