博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
报表、图表制作总结
阅读量:4627 次
发布时间:2019-06-09

本文共 3446 字,大约阅读时间需要 11 分钟。

php程序员,习惯地想到了用jpgraph 来做报表。

但是,jpgraph 乱码的问题我就没办法完全搞定,文件编码用utf-8

首先,在 jpgraph_ttf.inc.php

 

24103904-6dd7786ab28d483ab0e7ff03ebe2e32b.png

看到三个中文字体的定义,然后创建图片的时候,设置标题使用的中文字体

24103922-f6b0f4e61c104590b6b1c6b8920a296c.png

运行的时候发现报错:找不到字体bkai00mp.ttf

继续到 jpgraph_ttf.inc.php 找 bkai00mp.ttf

24103923-6dfe61628ed4495d87756210d0206416.png

将bkai00mp.ttf改成simsun.ttc宋体,bkai00mp.ttf是什么字体我就不知道了

然后图片中文显示正常了

可是,后面的问题由来了。

24103923-cc5d05fe4af94f12a6c84f60b482c9c3.png

创建线条,无论怎么设置字体,依然是中文乱码

24103924-373ac2c69f184115966e71add701f382.png

不知道怎么回事,不深入研究了,找找别的办法


q群交流,tony推荐用Highcharts,百度百科的介绍:Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。目前HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

下载一看,果然是好东西,做报表统计、曲线图之类的功能完美、强大

最终效果图:

24103925-c0374825c0b4481981b9b0024f3d6913.png

yii,c中的代码:

    //x 轴
        $day_30 = strtotime(date('Y-m-d',strtotime('-29 day'))); //最近三十天的时间戳
        $day_arr = array(); //最近30天日期数组
        $tmp_day_30 = $day_30;
        for($i=1;$i<=30;$i++){
            if($i==1){
                $day_arr[] = date('m-d',$tmp_day_30);
            }else{
                $tmp_day_30 = $tmp_day_30+24*3600;
                $day_arr[] = date('m-d',$tmp_day_30);
            }
        }
        // end x 轴
        // y 轴
        $db = Yii::app()->db;
        //所有的订单
        $sql = "select date_format(FROM_UNIXTIME(created),'%m-%d') as created,count(goods_name) as c
                from tb_order_info where created>='$day_30'
                group by date_format(FROM_UNIXTIME(created),'%m-%d')"
;
        $order = $db->createCommand($sql)->queryAll();
        $order_arr = $this->_createY($day_arr,$order);
        //各个产品的
        $every_arr = array();
        $allGoods = Goods::model()->findAll();
        foreach($allGoods as $v){
            $sql_1 = "select date_format(FROM_UNIXTIME(created),'%m-%d') as created,count(goods_name) as c
                from tb_order_info where created>='$day_30' and goods_id='{$v->id}'
                group by date_format(FROM_UNIXTIME(created),'%m-%d')"
;
            $every_arr[$v->id] = $this->_createY($day_arr,$db->createCommand($sql_1)->queryAll());
        }
        //end Y 轴
        $this->render('chart',array(
            'order_list'=>json_encode($order_arr),
            'day_list'=>json_encode($day_arr),
            'every_arr'=>$every_arr,
            'allGoods'=>$allGoods,
        ));

sql查询的时候,遇到不少麻烦,统计查询的sql忘记的差不多了,复习了半天

created

是时间戳,group by 分类统计的时候,要先将时间戳转换成想要的时间格式:
date_format(FROM_UNIXTIME(created),'%m-%d')

将查询到的订单数组,组合:

/**
     * 生成Y轴
     * @param array $day_arr X 轴 日期
     * @param array $order 订单
     * @return array
     */
    private function _createY($day_arr, $order){
        $order_arr = array();
        foreach($day_arr as $v){
            $order_arr[$v] = 0;
            foreach($order as $v2){
                if($v==$v2['created']){
                    $order_arr[$v] = intval($v2['c']);
                }
            }
        }
        return array_values($order_arr);
    }

 

按照时间的顺序,排好三十天内每天的下单数量

 

view的代码:

<?php
/* @var $this OrderInfoController */
/* @var $day_list x轴时间 */
/* @var $order_list Y轴数量 */
/* @var $every_arr 各个产品的Y轴数量 */
/* @var $allGoods 所有产品 */
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/highcharts/highcharts.js');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/highcharts/modules/exporting.js');
?>
<script type="text/javascript">
    $(function () {
        $('#order').highcharts({
            chart: {
                type: 'line',
                marginRight: 130,
                marginBottom: 50
            },
            title: {
                text: '最近30天下单统计',
                x: -20 //center
            },
            subtitle: {
                text: '',
                x: -20
            },
            xAxis: {
                categories: <?=$day_list?>
            },
            yAxis: {
                title: {
                    text: '数量'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                valueSuffix: '个'
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: [
                {
                name: '所有产品',
                data: <?=$order_list?>
                },
                <?php foreach($allGoods as $v): ?>
                {
                name: '<?=$v->title?>',
                data: <?=json_encode($every_arr[$v->id])?>
                },
                <?php endforeach; ?>
            ]
        });
    });
</script>
<div id="order"></div>

 
posted on
2013-05-24 10:40 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/xuzhenjun/archive/2013/05/24/3096356.html

你可能感兴趣的文章
20165204 Java第二周学习
查看>>
php数组转xml
查看>>
Binary Tree Serialisation Lintcode
查看>>
C# LINQ学习笔记
查看>>
如何解决安卓SDK无法下载Package的问题
查看>>
我的知识组织管理
查看>>
gradle spring boot构建项目
查看>>
MTK 修改默认屏幕亮度
查看>>
进程间的几种通信方式
查看>>
纯CCS绘制三角形箭头图案
查看>>
eclipse常见错误
查看>>
c++ string转char*
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
大道至简读后感以及JAVA伪代码
查看>>
bfs记录路径,蓝桥杯真题
查看>>
2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
查看>>
winXP启用SSL方式IIS
查看>>
java类路径classpath和包
查看>>
Oracler读取各种格式的相关日期格式
查看>>
Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
查看>>