highcharts php mysql_使用Highcharts结合PHP与Mysql生成饼状图

本文介绍了如何结合PHP、MySQL和Highcharts库来创建饼状图,展示搜索引擎带来的访问量。首先在MySQL中创建数据表,接着用PHP读取数据并转化为JSON格式,最后通过Highcharts的JavaScript代码生成饼状图,动态显示各搜索引擎的访问百分比。
摘要由CSDN通过智能技术生成

我们在做复杂的数据统计功能时会用到饼状图,饼状图用整个圆表示总体的数量或整体值1,用圆内各个扇形的大小表示各部分数量或该部分占总体的百分比,它可以清晰直观的表示各部分之间以及各部分与整体之间的数量关系。

本文将结合实际,使用PHP读取Mysql数据表中的数据,并将获取的数据按照要求输出给前端JS,再通过配置调用Highcharts图表库生成饼状图。

4057ce9f34a6c206e7e45dc68af13045.gif

fc42666552ff4632d72f17000b6a9374.png 

8b4fa488793a6a117c81957831133dae.png

1、准备

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

9ddaec10beed645ea4c1b6fb2b9f0ca8.png

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是什么东东,请查阅本站(helloweba.com)前面的相关文章。

var chart;

$(function() {

chart = new Highcharts.Chart({

chart: {

renderTo: 'chart_pie',  //饼状图关联html元素id值

defaultSeriesType: 'pie', //默认图表类型为饼状图

plotBackgroundColor: '#ffc',  //设置图表区背景色

plotShadow: true   //设置阴影

},

title: {

text: '搜索引擎统计分析'  //图表标题

},

credits: {

text: 'helloweba.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  echo $data;?> //核心数据列来源于php读取的数据并解析成JSON

}]

});  });

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

[["\u767e\u5ea6",1239],["google",998],["\u641c\u641c",342],["\u5fc5\u5e94",421],

["\u641c\u72d7",259],["\u5176\u4ed6",83]]

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

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

[{"name":"\u767e\u5ea6","y":1239,"sliced":true,"selected":true},["google",998],

["\u641c\u641c",342],["\u5fc5\u5e94",421],["\u641c\u72d7",259],["\u5176\u4ed6",83]]

注意看代码中前部分:{"name":"\u767e\u5ea6","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()请下载本例demo源码。

为了制作PHP+MySQL折线图,您需要使用Highcharts库和jQuery库。您可以按照以下步骤进行操作: 1. 首先,您需要从Highcharts官网下载Highcharts库和jQuery库,并将它们添加到您的项目中。 2. 接下来,您需要从MySQL数据库中检索数据。您可以使用PHP编写代码来连接到MySQL数据库并检索数据。 3. 将检索到的数据存储在一个数组中,并将其传递给JavaScript代码。 4. 使用Highcharts库中的chart()函数创建一个折线图,并将数据传递给该函数。 5. 最后,将折线图呈现在您的网页上。 以下是一个简单的PHP+MySQL折线图的示例代码: ```php <?php //连接到MySQL数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); //检索数据 $sql = "SELECT * FROM myTable"; $result = $conn->query($sql); //将数据存储在数组中 $data = array(); while($row = $result->fetch_assoc()) { $data[] = $row['value']; } //将数据传递给JavaScript代码 echo "<script> var data = ".json_encode($data)."; </script>"; ?> <!-- 在HTML中创建一个容器来呈现折线图 --> <div id="container"></div> <!-- 引用Highcharts库和jQuery库 --> <script src="jquery-1.8.2.min.js"></script> <script src="highcharts.js"></script> <!-- 创建折线图 --> <script> $(function () { $('#container').highcharts({ title: { text: '折线图', x: -20 //center }, xAxis: { categories: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] }, yAxis: { title: { text: '数值' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, series: [{ name: '数据', data: data }] }); }); </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值