代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
php 画折线图表
作者:
qita.in
/ 发布于
2012/10/22
/
479
php 画折线图表
<div><?php</div> <div>/******************************</div> <div>* 折线图生成函数</div> <div>* youd</div> <div>* 090207-01</div> <div>******************************/</div> <div>function line_stats_pic($value_y,$width,$high,$strong=1,$fix=0){</div> <div>//y值处理函数</div> <div>function line_point_y($num,$width,$high,$max_num_add,$min_num_add,$y_pxdensity){</div> <div> $return=$high-floor(($num-$min_num_add+$y_pxdensity)/(($max_num_add-$min_num_add)/$high));</div> <div> return $return;</div> <div>} <div></div> <div>//参数处理</div> <div>$allnum=sizeof($value_y);</div> <div>$max_num=max($value_y); //最大值</div> <div>$min_num=min($value_y); //最小值</div> <div>$limit_m=$max_num-$min_num; //极差</div> <div>$max_num_add=$max_num+$limit_m*0.1; //轴最大值</div> <div>$min_num_add=$min_num-$limit_m*0.1; //轴最小值</div> <div>$limit=$max_num_add-$min_num_add; //极差-坐标轴y</div> <div>$y_pxdensity=($max_num_add-$min_num_add)/$high; //y轴密度</div> <div>$x_pxdensity=floor($width/$allnum); //x轴密度</div> <div>reset($value_y); //将数组指针归零</div> <div>$i=0;</div> <div>foreach($value_y as $val){</div> <div> $point_y[$i]=line_point_y($val,$width,$high,$max_num_add,$min_num_add,$y_pxdensity);</div> <div> $i++;</div> <div>} <div>$zero_y=line_point_y(0,$width,$high,$max_num_add,$min_num_add,$y_pxdensity); //零点的y值</div> <div>$empty_size_x=(strlen($max_num) > strlen($min_num) ? strlen($max_num) : strlen($min_num))*5+3; //左边空白</div> <div></div> <div>//图片流开始</div> <div>header("Content-type:image/png");</div> <div>$pic=imagecreate($width+$empty_size_x+10,$high+13);</div> <div>imagecolorallocate($pic,255,255,255); //背景色</div> <div>$color_1=imagecolorallocate($pic,30,144,255); //线条色</div> <div>$color_2=imagecolorallocate($pic,0,0,0); //黑色</div> <div>$color_3=imagecolorallocate($pic,194,194,194);//灰色</div> <div>//绘制网格</div> <div>imagesetthickness($pic,1); //网格线宽</div> <div>$y_line_width=floor($width/100); //纵网格线数目</div> <div>$y_line_density=$y_line_width==0 ? 0 :floor($width/$y_line_width); //纵网格线密度</div> <div>$point_zero_y=$zero_y > $high ? $high : $zero_y;</div> <div>imagestring($pic,1,$empty_size_x-1,$high+4,"0",$color_2); //零点数轴标记</div> <div>for($i=1;$i <= $y_line_width;$i++){ //绘制纵网格线</div> <div> imagesetthickness($pic,1); //网格线宽</div> <div> imageline($pic,$y_line_density*$i+$empty_size_x,0,$y_line_density*$i+$empty_size_x,$high,$color_3);</div> <div> imagesetthickness($pic,2); //轴点线宽</div> <div> imageline($pic,$y_line_density*$i+$empty_size_x,$point_zero_y-4,$y_line_density*$i+$empty_size_x,$point_zero_y,$color_2);</div> <div> imagestring($pic,1,100*$i+$empty_size_x-5,$high+4,$allnum/$y_line_width*$i,$color_2); //数轴标记</div> <div>} <div>$x_line_width=floor($high/30); //横网格线数目</div> <div>$x_line_density=$x_line_width==0 ? 0 :floor($high/$y_line_width); //横网格线密度</div> if($zero_y > $high){ //绘制横网格线</div> <div> imagestring($pic,1,0,$high-3,round($min_num_add,$fix),$color_2); //零点数轴标记</div> <div> for($i=1;$i <= $x_line_width;$i++){</div> <div> imagesetthickness($pic,1); //网格线宽</div> <div> imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,$width+$empty_size_x,$high-$x_line_density*$i,$color_3);</div> <div> imagesetthickness($pic,2); //轴点线宽</div> <div> imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,3+$empty_size_x,$high-$x_line_density*$i,$color_2);</div> <div> imagestring($pic,1,0,$high-$x_line_density*$i-3,round($limit/$x_line_width*$i+$min_num_add,$fix),$color_2); //数轴标记</div> <div> } <div>}else{</div> <div> imagestring($pic,1,$empty_size_x-8,$zero_y,"0",$color_2); //零点数轴标记</div> <div> for($i=1;$i <= ceil($x_line_width/2);$i++){</div> <div> imagesetthickness($pic,1); //网格线宽</div> <div> imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,$width+$empty_size_x,$zero_y-$x_line_density*$i,$color_3);</div> <div> if($zero_y+$x_line_density*$i < $high){</div> <div> imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,$width+$empty_size_x,$zero_y+$x_line_density*$i,$color_3);</div> <div> } <div> imagesetthickness($pic,2); //轴点线宽</div> <div> imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,3+$empty_size_x,$zero_y-$x_line_density*$i,$color_2);</div> <div> if($zero_y+$x_line_density*$i < $high){</div> <div> imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,3+$empty_size_x,$zero_y+$x_line_density*$i,$color_2);</div> <div> } <div> imagestring($pic,1,0,$zero_y-$x_line_density*$i-3,round($limit/$x_line_width*$i,$fix),$color_2); //数轴标记</div> <div> if($zero_y+$x_line_density*$i < $high){</div> <div> imagestring($pic,1,0,$zero_y+$x_line_density*$i-3,round(-$limit/$x_line_width*$i,$fix),$color_2); //数轴标记</div> <div> } <div> } <div>} <div>//绘制轴线</div> <div>imagesetthickness($pic,2); //轴线宽</div> <div>imageline($pic,1+$empty_size_x,0,1+$empty_size_x,$high,$color_2);</div> if($zero_y > $high){ //x轴位置</div> <div> imageline($pic,0+$empty_size_x,$high,$width+$empty_size_x,$high,$color_2);</div> <div>}else{</div> <div> imageline($pic,0+$empty_size_x,$zero_y,$width+$empty_size_x,$zero_y,$color_2);</div> <div>} <div>//产生折线</div> <div>$point_x=0;</div> <div>$j=0;</div> <div>imagesetthickness($pic,$strong); //线条粗细</div> <div>while($j+1 < $allnum){</div> <div> imageline($pic,$point_x+2+$empty_size_x,$point_y[$j],$point_x+$x_pxdensity+2+$empty_size_x,$point_y[$j+1],$color_1);</div> <div> $point_x+=$x_pxdensity;</div> <div> $j++;</div> <div>} <div>imagepng($pic);</div> <div>imagedestroy($pic);</div> <div>} <div></div> <div>/*</div> <div>函数描述及例子</div> <div>参数说明:</div> <div>$value_y -------- 包含你想生成折线图的数组,要求键值从0开始递增。</div> <div>$width--------生成的折线图的网格宽度(不算白边)</div> <div>$high--------高度</div> <div>$strong-------线条粗细(默认为1)</div> <div>$fix-------数据保留的位数(默认为取整)</div> <div>*/</div> <div></div> <div>for($i=0;$i<100;$i++){</div> <div> $value = rand(1,200);</div> <div> $value_y[]=$value;</div> <div>} <div>line_stats_pic($value_y,500,100,1,1);</div> <div>?></div>
试试其它关键字
画折线图表
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
qita.in
贡献的其它代码
(
28
)
.
跨站刷票代码
.
计算一个文件夹的大小
.
全屏点弹代码
.
替代标题
.
实现字符串翻转(包含中文汉字)
.
PHP中英文断句无乱码
.
各种过滤字符函数
.
获取当前页面完整URL地址
.
将html 转成wml WAP标记语言
.
检查用户名是否符合规定
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3