使用谷歌图表api和php创建PieChart

时间:2013-10-07 13:47:36

标签: php sql json google-visualization

我对谷歌图表api有点新,并且还在擦除我的PHP知识,所以也许有人可以帮助解决这个(IMO)的基本问题......

所以我有这个php类从服务器查询数据,应该将其发布回我的页面。其中有一个有效的折线图,您可以在下面的代码段中看到:

$rowdata = array();
            $i=0;
            $_POST['from'] = str_replace("/","-",$_POST['from']);
            $_POST['to'] = str_replace("/","-",$_POST['to']);

            $cur_date = $_POST['from'];

            $sql =  "SELECT DATE(entered),
                           COUNT(*) AS totalaccounts,
                           SUM(CASE WHEN facebook_username != '' THEN 1 ELSE 0 END) AS facebook,
                           SUM(CASE WHEN facebook_username = '' THEN 1 ELSE 0 END) AS standard
                    FROM Account
                    WHERE entered BETWEEN '". $_POST['from'] ."' AND '". $_POST['to'] ."'
                    GROUP BY DATE(entered)";

            $result = $dbMain->query($sql);
            $rows = tratarDadosParaGrafico($result);

            $return = json_encode(array('cols' => $cols, 'rows' => $rows));

            $data = array(
                'cols' => array(
                    array('id' => '', 'label' => 'Date', 'type' => 'string'),
                    array('id' => '', 'label' => 'Total Accounts', 'type' => 'number'),
                    array('id' => '', 'label' => 'Total Accounts (Facebook)', 'type' => 'number'),
                    array('id' => '', 'label' => 'Total Accounts (Non Facebook)', 'type' => 'number')
                ),
                'rows' => $rows
            );


            $chart = new Chart('LineChart');
            $options = array('title' => 'Accounts');
            $chart->load(json_encode($data));
            echo $chart->draw('rchart', $options);

我试图做的是使用相同的查询结果($ data)来填充另一个图表,这个是一个饼图......所以我只是粘贴了最后4行代码,在创建新代码时更改了参数图表实例:

$chart = new Chart('PieChart');
            $options = array('title' => 'Accounts');
            $chart->load(json_encode($data));
            echo $chart->draw('pchart', $options);

在此之后,我关闭了php标签并使用2个div显示我的图表......

<div id="rchart"></div>
        <div id="pchart"></div>

这里的所有东西都来自这个index.php类,我根本没有看过html文件......我可以在折线图正下方看到饼图,但是它没有数据,即整个图表为灰色并标记为“其他”

我做错了什么?提前谢谢!

[编辑] 假设我想要一个只有2个切片的饼图,为什么下面的代码不起作用? (我得到“无法读取属性'1'未定义”错误)

$data = array(
                'cols' => array(
                    array('label' => 'Pie slice labels', 'type' => 'string'),
                    array('label' => 'Pie slice values', 'type' => 'number')
                ),
                'rows' => array(
                    array('v' => intval($facebook_accounts[0]), 'type' => 'int'),
                    array('v' => intval($default_accounts[0]), 'type' => 'int')
                )
            );
            $chart = new Chart('PieChart');
            $options = array('title' => 'Accounts');
            $chart->load(json_encode($data));
            echo $chart->draw('piechart', $options);

[编辑]也许这可以帮助你帮助我:) https://groups.google.com/forum/#!topic/google-visualization-api/Wi_WOVOgzG8

Creating Pie char from mysql database using php and google charts

1 个答案:

答案 0 :(得分:2)

PieCharts不使用与LineCharts相同的数据结构。 PieCharts期望两列数据:第一列是饼图切片标签,第二列是饼图切片值。您必须重新配置数据拉取以使数据格式正确。

编辑:

以下是一些用于为PieChart构建DataTable的PHP伪代码示例:

$data = array(
    'cols' => array(
        array('label': 'Pie slice labels', type: 'string'),
        array('label': 'Pie slice values', type: 'number')
    ),
    'rows' => array()
);
while (/* loop over SQL results */) {
    $data['rows'][] = array('c' => array(
        array('v' => /* pie slice label */),
        array('v' => /* pie slice value */) // use (int) or (float) to parse appropriately, as many databases output numbers as strings
    ));
}