PHP in the use of GD implementation of the histogram, wrote a histogram of their own class, on the code.
1
title = $title; $this->xdata = $xdata; $this->ydata = $ydata; $this->color = Array (' #058DC7 ', ' #50B432 ', ' #ED561B ', ' #DDDF00 ', ' #24CBE5 ', ' #64E572 ', ' #FF9655 ', ' #FFF263 ', ' #6AF9C4 '); 23} 24 25/* 26 * Public method, set the color of the bar chart array color arrays, the element value is ' #058DC7 ' this form of * * * FUNCTI On Setbarcolor ($color) {$this->color = $color; 31} 32 33/* 34 * Public method, draw bar Chart 35 */36 function Mkbarchart () {PNs $ydataNum = $this->arraynum ($this->ydata);//Get the number of data groupings $max = $th Is->arraymax ($this->ydata); Gets the maximum value of all rendered data $multi = ($max > 100)? $max/100:1; If the maximum data is greater than 100, zoom out, get the $barHeightMulti = 2.2; Percentage of bar high scale $barWidth = (16-2* ($ydataNum-1)) > 10? (16-2* ($ydataNum-1)): 10; The width of the article $barSpace = 16; The spacing between the strips is $chartLeft = (1+strlen ($max)) *12; Set the margin on the left side of the picture $barY = 250; EarlyInitialize the y coordinate of the bar 46//Set the width, height of the picture $this->width = ($ydataNum * $barWidth + $barSpace) *count ($this->xdata) + $chartLeft; $this->height = 300; $this->image = Imagecreatetruecolor ($this->width, $this->height); Prepare the canvas $this->bgcolor = imagecolorallocate ($this->image,255,255,255); Background color of the picture 51 52//Set the color of the bar chart $color = Array (); ($this->color as $col) {$col = substr ($col, 1,strlen ($col)-1), and $red = h Exdec (substr ($col, 0,2)); $green = Hexdec (substr ($col, 2,2)); Hexdec $blue = substr ($col, 4,2); $color [] = Imagecolorallocate ($this->image, $red, $green, $blue); 60} 61 62//Set the color of the segment, the color of the font, the path of the font $lineColor = Imagecolorallocate ($this->image, 0xc C,0XCC,0XCC); $fontColor = Imagecolorallocate ($this->image, 0x95,0x8f,0x8f); $fontPath = ' font/simsun.tTC '; Imagefill ($this->image,0,0, $this->bgcolor); Painting Background 68 69//Draw a short line with left and right edges ($i = 0; $i < 6; $i + +) {imageline ($this-& Gt;image, $chartLeft -10, $barY-$barHeightMulti * $max/5/$multi * $i, $this->width, $barY-$barHeightMulti * $max/5/$ multi* $i, $lineColor); Imagestring ($this->image,4,5, $barY-$barHeightMulti * $max/5/$multi * $i -8,floor ($max/5* $i), $fontColor); Imageline ($this->image, $chartLeft -10,30, $chartLeft -10, $barY, $lineColor); Imageline ($this->image, $this->width-1,30, $this->width-1, $barY, $lineColor); 76 77//Draw bar ($this->ydata as $key + $val) {$ydataNum = = 1 {80//a series of data when Bayi $barX = $chartLeft + 3 + ($barWidth + $barSpace) * $KEY; 82 Imagefilledrectangle ($this->image, $barX, $barY-$barHeightMulti * $val/$multi, $barX + $barWidth, $barY, $color[$key%count ($this->color)]); }elseif ($ydataNum > 1) {84//multiple series of data $cbarSpace = $barSpace + $bar width* ($ydataNum-1); ($val as $ckey + $cval) {$barX = $chartLeft + 3 + $barWidth * $key + $ ckey* ($cbarSpace + $barWidth); Imagefilledrectangle ($this->image, $barX, $barY-$barHeightMulti * $cval/$multi, $barX + $barWidth, $barY , $color [$key%count ($this->color)]); 89} 90} 91 92} 93 94//The value of the x-coordinate of the drawing bar 95 foreach ($this->xdata as $key + $val) {$barX = $chartLeft + ($ydataNum * $barWidth + $barSpace) * $key + $ydataNum * $barWidth/3; Imagettftext ($this->image,10,-45, $barX, $barY +15, $fontColor, $fontPath, $this->xdata[$key]); 98} 99 100//Painting title 101 $titleStart = ($this->width-5.5*strlen ($this->title))/2;102Imagettftext ($this->image,11,0, $titleStart, $fontColor, $fontPath, $this->title); 103 104//Output Picture 105 Header ("Content-type:image/png"); 106 imagepng ($this->image); 107}108 109/*110 * Private method, when the array is a two-tuple array, the length of the statistic array 111 * Array arr to do the array of statistics */113 private function Arraynum ($arr) {$num = 0 ; Is_array ($arr) {$num ++;117 for ($i = 0; $i < count ($arr); $i + +) {118 if (Is_array ($arr [$i])) {119 $num = count ($arr); break;121 }122}123}124 return $num; 125}126 127/*128 * Private method, calculating the depth of the array 129 * Array arr arrays */131 private Function arraydepth ($arr) {$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 * Private method, find the maximum value in a group 147 * Array arr numeric array 148 */149 Private Function ArrayMax ($arr) {$depth = $this->arraydepth ($arr); 151 $max = 0;152 if ($dep th = = 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//destructor 184 function __destruct () {185 Imagedestroy ($this->image); 186}187}188? >
This class can be implemented to draw a series of histogram and a series of histogram, as follows:
A column chart of a series
Histogram of multiple series