如何使用Highcharts结合PHP与Mysql生成饼状图
创始人
2024-12-16 16:42:03
0次
1、准备

为了更好的讲解,实例中在Mysql数据库中建立一张表chart_pie,用于表示各搜索引擎带来的访问量,表中分别有id、title和pv三个字段,id是自增长整型、主键;title表示搜素引擎的名称,pv表示对应的访问量。chart_pie表中已预置了相关数据,如图:

2、PHP

在pie.php文件中,写入如下代码:

include_once('connect.php'); //连接数据库 $res = mysql_query("select * from chart_pie"); while($row = mysql_fetch_array($res)){ $arr[] = array( $row['title'],intval($row['pv']) ); } $data = json_encode($arr);

代码中使用原生的PHP查询mysq数据的方法,将查询的结果集保存在一个数组$arr里,并将该数组转换 以备前端js调用。

3、Javascript

通过配置Highcharts,可以生成一个漂亮的饼状图,详见代码及注释,如果你还不知道Highcharts是什么东东,请查阅本站(xuebuyuan.com)前面的相关文章。

var chart; $(function() { chart = new Highcharts.Chart({        chart: {            renderTo: 'chart_pie',  //饼状图关联html元素id值 defaultSeriesType: 'pie', //默认图表类型为饼状图 plotBackgroundColor: '#ffc',  //设置图表区背景色            plotShadow: true   //设置阴影        },        title: {            text: '搜索引擎统计分析'  //图表标题        }, credits: { text: 'xuebuyuan.com' },        tooltip: {            formatter: function() { //鼠标滑向图像提示框的格式化提示信息                return '' + this.point.name + ': ' +                twoDecimal(this.percentage) + ' %';            }        },        plotOptions: {            pie: {                allowPointSelect: true, //允许选中,点击选中的扇形区可以分离出来显示                cursor: 'pointer',  //当鼠标指向扇形区时变为手型(可点击) //showInLegend: true,  //如果要显示图例,可将该项设置为true                dataLabels: {                    enabled: true,  //设置数据标签可见,即显示每个扇形区对应的数据                    color: '#000000',  //数据显示颜色                    connectorColor: '#999',  //设置数据域扇形区的连接线的颜色 style:{ fontSize: '12px'  //数据显示的大小 },                    formatter: function() { //格式化数据                        return '' + this.point.name + ': ' +                        twoDecimal(this.percentage) + ' %';                    }                }            }        },        series: [{ //数据列            name: 'search engine', data: //核心数据列来源于php读取的数据并解析成JSON        }]    }); });

上述代码中,核心数据data来源于pie.php中php转换的json数据:$data。转换后输出的JSON数据格式为:

[["u767eu5ea6",1239],["google",998],["u641cu641c",342],["u5fc5u5e94",421], ["u641cu72d7",259],["u5176u4ed6",83]]

不用担心,Highcharts会自动将JSON数据解析处理,并生成百分比的数据。

其实,Highcharts生成的饼状图还可以设置默认初始选中的扇形,即默认选中的扇形会从整圆形中分离出来,以便突出显示。该效果要求默认data格式为:

[{"name":"u767eu5ea6","y":1239,"sliced":true,"selected":true},["google",998], ["u641cu641c",342],["u5fc5u5e94",421],["u641cu72d7",259],["u5176u4ed6",83]]

注意看代码中前部分:{"name":"u767eu5ea6","y":1239,"sliced":true,"selected":true},这个字符串如何用PHP得到呢?这就要修改pie.php中的php部分代码:

while($row = mysql_fetch_array($res)){ if($row['id']==1){ $arr1[] = array( "name" =>  $row['title'], "y" => intval($row['pv']), "sliced" => true,  //默认分离 "selected" => true  //默认选中 ); }else{ $arr[] = array(    $row['title'],intval($row['pv'])    ); } } //合并数组 $arrs = array_merge($arr1,$arr); $data = json_encode($arrs);

我们在循环遍历结果集时,当id为1时,将该项设置为默认选中扇形区,构建数组$arr1,否则构建另一个数组$arr,然后将这两个数组合并,并将合并后的数组转换为json数据,供Highcharts调用。

此外,格式化数据市,如果要显示百分比,可使用this.percentage,Highcharts会自动将整数转换为百分数,如果要显示数据量,直接使用this.y。

使用百分比:

formatter: function() { //格式化数据    return '' + this.point.name + ': ' + twoDecimal(this.percentage) + ' %'; }

使用实际数据:

formatter: function() { //格式化数据 return '' + this.point.name + ': ' + this.y ; }

注意:在使用百分比数据时,需要将数据强制保留两位小数,否则有可能出现37.0000000001的情况,而实际上是37%。保留2位小数的JS函数twoDecimal()

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...