На практике встречаются задачи, в которых есть необходимость построения графического представления данных, позволяющие быстро оценить соотношение нескольких величин. Для этих целей используются диаграммы, которые представляют собой геометрические символьные изображения информации с применением различных приёмов техники визуализации.
В данном примере демонстрируется построение диаграммы на PHP, с использованием библиотеки GD.
GD (Graphics Library) — программная библиотека, для динамической работы с изображениями. Библиотека позволяет создавать изображения в форматах GIF, JPEG, PNG и WBMP.
Код:
<?php // массив значений $values = array("23","32","35","57","12", "3","36","54","32","15", "43","24","30"); // Определяем общее количество столбцов $columns = count($values); // Ширина и высота конечного изображения $width = 200; $height = 100; // Отступ между колонками $padding = 5; // Ширина одной колонки $column_width = $width / $columns ; // Переменные изображения $im = imagecreate($width,$height); $gray = imagecolorallocate ($im,0xcc,0xcc,0xcc); $gray_lite = imagecolorallocate ($im,0xee,0xee,0xee); $gray_dark = imagecolorallocate ($im,0x7f,0x7f,0x7f); $white = imagecolorallocate ($im,0xff,0xff,0xff); // Фон imagefilledrectangle($im,0,0,$width,$height,$white); $maxv = 0; // Вычисляем максимальное значение for($i=0;$i<$columns;$i++)$maxv = max($values[$i],$maxv); // Строим диаграмму for($i=0;$i<$columns;$i++) { $column_height = ($height / 100) * (( $values[$i] / $maxv) *100); $x1 = $i*$column_width; $y1 = $height-$column_height; $x2 = (($i+1)*$column_width)-$padding; $y2 = $height; imagefilledrectangle($im,$x1,$y1,$x2,$y2,$gray); // Для 3D эффекта imageline($im,$x1,$y1,$x1,$y2,$gray_lite); imageline($im,$x1,$y2,$x2,$y2,$gray_lite); imageline($im,$x2,$y1,$x2,$y2,$gray_dark); } // Отправляем PNG заголовок. // При необходимости можно заменить на JPEG или GIF и т.д. header ("Content-type: image/png"); imagepng($im); ?>
Значения переменных — параметров:
$values – массив значений величин столбцов гистограммы;
$width – ширина изображения на выходе;
$height – высота изображения на выходе;
$padding – отступ между колонками;
Попробуем построить 3D диаграмму, взяв за основу вышеуказанный пример.
Код:
<?php // здесь в принципе всё так же, // как и в предыдущем примере $values = array("23","32","38","57","12", "4","36","54","32","15", "43","44","30"); $columns = count($values); $width = 200; $height = 100; $column_width = floor($width / $columns) ; $padding = min(max($padding,1),$column_width); $im = imagecreate($width,$height); $r = 0xaf; $g = 0xaf; $b = 0xaf; // переменные изображения $gray = imagecolorallocate ($im,$r,$g,$b); $gray_lite = imagecolorallocate ($im,$r+40,$g+40,$b+40); $gray_dark = imagecolorallocate ($im,$r-20,$g-20,$b-20); $white = imagecolorallocate ($im,0xff,0xff,0xff); imagefilledrectangle($im,0,0,$width,$height,$white); $maxv = 0; // уменьшаем максимальную высоту, для нормальных пропорций $max_height = $height - $column_width; for($i=0;$i<$columns;$i++)$maxv = max($values[$i],$maxv); for($i=0;$i<$columns;$i++) { $column_height = ($max_height / 100) * (( $values[$i] / $maxv) *100); $x1 = $i*$column_width; $y1 = $height-$column_height; $x2 = (($i+1)*$column_width)-$padding; $y2 = $height; // рисуем основные колонки imagefilledrectangle($im,$x1,$y1,$x2,$y2,$gray); // вычитаем смещение для эффекта 3D $offset = ($column_width-$padding) / 2; // массив для верхней части $pt = array($x1,$y1, $x1+$offset,$y1-$offset, $x2+$offset,$y1-$offset, $x2,$y1); // рисуем imagefilledpolygon($im,$pt,4,$gray_lite); // боковые части $pt = array($x2,$y1, $x2+$offset,$y1-$offset, $x2+$offset,$y2-$offset, $x2,$y2); // прорисовываем так же imagefilledpolygon($im,$pt,4,$gray_dark); } // возвращаем изображение с помощью ImagePng или imagejpeg, // как в примере указанном выше ?>
В результате получим такую диаграмму:
Доброго дня. тут деление на ноль!!