更新我已更新我的代码以响应@MichaelRushton评论。我现在正在使用Highcharts,但我无法输出数据系列。
我现在有一个从mysql查询生成的以下数组,我想将它输出到折线图中。我的Y轴应包含金额,x轴是日期范围,图例是图表上绘制的不同项目。
// Call the stored procedure
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$array[$row['legend']][$row['date']] = $row['amount'];
//print_r($array);
}
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'line'
},
xAxis:
{
categories: [2012-03-01, 2012-03-02, 2012-03-03, 2012-03-04, 2012-03-05, 2012-03-06, 2012-03-07, 2012-03-08, 2012-03-09, 2012-03-10, 2012-03-11, 2012-03-12, 2012-03-13, 2012-03-14, 2012-03-15, 2012-03-16, 2012-03-17, 2012-03-18, 2012-03-19, 2012-03-20, 2012-03-21, 2012-03-22, 2012-03-23, 2012-03-24, 2012-03-25, 2012-03-26, 2012-03-27, 2012-03-28, 2012-03-29, 2012-03-30, 2012-03-31],
},
series:
[
<?php
foreach ($array as $legend => $data)
{
echo '{';
echo "name: '" . $legend . "',";
$values = array();
for ($i = 1; $i <= 31; ++$i)
{
$values[] = isset($data[$i]) ? $data[$i] : 0;
}
echo 'data: [' . implode(', ', $values) . '],';
echo '},';
}
?>
],
}
);
<div id="container" style="width: 100%; height: 400px"></div>
)
此代码向我显示以下输出:
series: [ {name: 'Something Tastier',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],},{name: 'Something Tasty',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],}, ], } );
似乎没错,除了没有输出到数据系列的值。如果有人有任何进一步的想法,将不胜感激。
答案 0 :(得分:1)
Highcharts是我最喜欢的图表选项。可能值得将数组结构化为:
Array (
[legend_one] => Array
(
[2012-03-01] => 100
[2012-03-02] => 200
[2012-03-03] => 300
...
)
[legend_two] => Array
(
// Day of the month
[2012-03-01] => 100
[2012-03-02] => 200
[2012-03-03] => 300
...
)
...
)
然后您可以使用这样的Highcharts:
编辑:现在使用完整日期而不仅仅是白天,使月份变为动态(使用$start
变量),并将日期迭代器设置为0而不是1以消除对使用$i - 1
计算下一个日期时strtotime
。
chart = new Highcharts.Chart({
xAxis:
{
categories: [
<?php
// You could dynamically set this date using $_GET/$_POST
$start = '2012-03-01';
$dates = array();
for ($i = 0, $days = date('t', strtotime($start)); $i < $days; ++$i)
{
$dates[] = date('Y-m-d', strtotime($start . ' + ' . $i . ' day'));
}
echo "'" . implode("', '", $dates) . "'";
?>
],
},
series:
[
<?php
foreach ($array as $legend => $data)
{
echo '{';
echo "name: '" . $legend . "',";
$values = array();
for ($i = 0; $i < $days; ++$i)
{
$date = date('Y-m-d', strtotime($start . ' + ' . $i . ' day'));
$values[] = isset($data[$date]) ? $data[$date] : 0;
}
echo 'data: [' . implode(', ', $values) . '],';
echo '},';
}
?>
],
}
);
答案 1 :(得分:0)
你需要转换你的php数组输出有用的fr highcharts使用。试试json_encode
。并在这里查看http://code.google.com/p/highchartwrapper/
答案 2 :(得分:0)
你走错了路。如果您搜索已经可用的内容,那么您应该按照他们接受的方式输出数据。不是相反。
话虽如此,试试pChart。它广泛支持不同的格式。