PHP中利用GD实现的柱状图
PHP中利用GD实现的柱状图,自己写的一个画柱状图的类,上代码。
1 <?php 2 Class Chart{ 3 private $image; // 定义图像 4 private $title; // 定义标题 5 private $ydata; // 定义Y轴数据 6 private $xdata; // 定义X轴数据 7 private $color; // 定义条形图颜色 8 private $bgcolor; // 定义图片背景颜色 9 private $width; // 定义图片的宽 10 private $height; // 定义图片的长 11 12 /* 13 * 构造函数 14 * String title 图片标题 15 * Array xdata 索引数组,X轴数据 16 * Array ydata 索引数组,数字数组,Y轴数据 17 */ 18 function __construct($title,$xdata,$ydata) { 19 $this->title = $title; 20 $this->xdata = $xdata; 21 $this->ydata = $ydata; 22 $this->color = array('#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'); 23 } 24 25 /* 26 * 公有方法,设置条形图的颜色 27 * Array color 颜色数组,元素取值为'#058DC7'这种形式 28 */ 29 function setBarColor($color){ 30 $this->color = $color; 31 } 32 33 /* 34 * 公有方法,画条形图 35 */ 36 function mkBarChart(){ 37 $ydataNum = $this->arrayNum($this->ydata); // 取得数据分组的个数 38 $max = $this->arrayMax($this->ydata); // 取得所有呈现数据的最大值 39 $multi = ($max > 100)? $max/100 : 1; // 如果最大数据是大于100的则进行缩小处理,获取 40 $barHeightMulti = 2.2; // 条形高缩放的比例 41 $barWidth = (16 - 2*($ydataNum - 1)) > 10 ? (16 - 2*($ydataNum - 1)) : 10; // 条的宽 42 $barSpace = 16; // 条之间的间距 43 $chartLeft = (1+strlen($max))*12; // 设置图片左边的margin 44 45 $barY = 250; // 初始化条形图的Y的坐标 46 // 设置图片的宽、高 47 $this->width = ($ydataNum*$barWidth + $barSpace)*count($this->xdata) + $chartLeft; 48 $this->height = 300; 49 $this->image = imagecreatetruecolor($this->width ,$this->height); // 准备画布 50 $this->bgcolor = imagecolorallocate($this->image,255,255,255); // 图片的背景颜色 51 52 // 设置条形图的颜色 53 $color = array(); 54 foreach($this->color as $col) { 55 $col = substr($col,1,strlen($col)-1); 56 $red = hexdec(substr($col,0,2)); 57 $green = hexdec(substr($col,2,2)); 58 $blue = hexdec(substr($col,4,2)); 59 $color[] = imagecolorallocate($this->image ,$red, $green, $blue); 60 } 61 62 // 设置线段的颜色、字体的颜色、字体的路径 63 $lineColor = imagecolorallocate($this->image ,0xcc,0xcc,0xcc); 64 $fontColor = imagecolorallocate($this->image, 0x95,0x8f,0x8f); 65 $fontPath = 'font/simsun.ttc'; 66 67 imagefill($this->image,0,0,$this->bgcolor); // 绘画背景 68 69 // 绘画图的分短线与左右边线 70 for($i = 0; $i < 6; $i++ ) { 71 imageline($this->image,$chartLeft-10,$barY-$barHeightMulti*$max/5/$multi*$i,$this->width,$barY-$barHeightMulti*$max/5/$multi*$i,$lineColor); 72 imagestring($this->image,4,5,$barY-$barHeightMulti*$max/5/$multi*$i-8,floor($max/5*$i),$fontColor); 73 } 74 imageline($this->image,$chartLeft-10,30,$chartLeft-10,$barY,$lineColor); 75 imageline($this->image,$this->width-1,30,$this->width-1,$barY,$lineColor); 76 77 // 绘画图的条形 78 foreach($this->ydata as $key => $val) { 79 if($ydataNum == 1) { 80 // 一个系列数据时 81 $barX = $chartLeft + 3 + ($barWidth+$barSpace)*$key; 82 imagefilledrectangle($this->image,$barX,$barY-$barHeightMulti*$val/$multi,$barX+$barWidth,$barY,$color[$key%count($this->color)]); 83 }elseif($ydataNum > 1) { 84 // 多个系列的数据时 85 $cbarSpace = $barSpace + $barWidth*($ydataNum-1); 86 foreach($val as $ckey => $cval) { 87 $barX = $chartLeft + 3 + $barWidth*$key + $ckey*($cbarSpace+$barWidth); 88 imagefilledrectangle($this->image,$barX,$barY-$barHeightMulti*$cval/$multi,$barX+$barWidth,$barY,$color[$key%count($this->color)]); 89 } 90 } 91 92 } 93 94 // 绘画条形图的x坐标的值 95 foreach($this->xdata as $key => $val) { 96 $barX = $chartLeft + ($ydataNum*$barWidth+$barSpace)*$key + $ydataNum*$barWidth/3; 97 imagettftext($this->image,10,-45,$barX,$barY+15,$fontColor,$fontPath,$this->xdata[$key]); 98 } 99 100 // 绘画标题101 $titleStart = ($this->width - 5.5*strlen($this->title))/2;102 imagettftext($this->image,11,0,$titleStart,20,$fontColor,$fontPath,$this->title);103 104 // 输出图片105 header("Content-Type:image/png");106 imagepng ( $this->image );107 }108 109 /*110 * 私有方法,当数组为二元数组时,统计数组的长度 111 * Array arr 要做统计的数组112 */113 private function arrayNum($arr) {114 $num = 0;115 if(is_array($arr)) {116 $num++;117 for($i = 0; $i < count($arr); $i++){118 if(is_array($arr[$i])) {119 $num = count($arr);120 break;121 }122 }123 }124 return $num;125 }126 127 /*128 * 私有方法,计算数组的深度 129 * Array arr 数组130 */131 private function arrayDepth($arr) {132 $num = 0;133 if(is_array($arr)) {134 $num++;135 for($i = 0; $i < count($arr); $i++){136 if(is_array($arr[$i])) {137 $num += $this->arrayDepth($arr[$i]);138 break;139 }140 }141 }142 return $num;143 }144 145 /*146 * 私有方法,找到一组中的最大值 147 * Array arr 数字数组148 */149 private function arrayMax($arr) {150 $depth = $this->arrayDepth($arr);151 $max = 0;152 if($depth == 1) {153 rsort($arr);154 $max = $arr[0]; 155 }elseif($depth > 1) {156 foreach($arr as $val) {157 if(is_array($val)) {158 if($this->arrayMax($val) > $max) {159 $max = $this->arrayMax($val);160 }161 }else{ 162 if($val > $max){163 $max = $val;164 }165 } 166 } 167 }168 return $max;169 }170 171 function arrayAver($arr) {172 $aver = array();173 foreach($arr as $val) {174 if(is_array($val)) {175 $aver = array_merge($aver,$val);176 }else{177 $aver[] = $val;178 }179 }180 return array_sum($aver)/count($aver);181 182 }183 // 析构函数184 function __destruct(){185 imagedestroy($this->image);186 }187 }188 ?><br /><br />这个类可以实现画一个系列的柱状图和多个系列的柱状图,如下:
一个系列的柱状图
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />多个系列的柱状图

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.
