Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Круговая диаграмма средствами библиотеки GD

В случае, если необходимо отобразить процентное соотношение каких-либо параметров, не обойтись без круговой диаграммы. Строить ее совсем не трудно, если знать о существовании функций библиотеки GD imagearc и imagefilledarc, которые рисуют дугу и закрашенную дугу соответственно. В качестве параметров функции imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col) нужно указать: im - идентификатор области рисования; cx, cy - координаты центра дуги; w, h - ширину и высота дуги (для построения сектора круга они должны быть равны); s, e - начальный и конечный углы дуги (в градусах, от 0 до 360) и конечно же col - цвет дуги. Функция imagefilledarc() отличается от предыдущей лишь наличием дополнительного параметра style, который определяет способ заливки сектора. Этот параметр может принимать следующие значения:

Эти параметры можно указывать, используя оператор || (ИЛИ).

Теперь, когда у нас есть все необходимые знания, создадим скрипт круговой диаграммы в новом файле diagramma.php. Для начала создадим функцию рисования одного сектора круга требуемого цвета с заданным центром, радиусом, начальным и конечным углами:


<?php
function drawSegment($x0,$y0,$radius,$begAngle,$endAngle,$color)
{
global 
$im,$x0,$y0,$black;
//рисуем сектор круга соответствующих размера и цвета
imagefilledarc($im$x0$y0$radius*2$radius*2,
    
$begAngle$endAngle,
    
$colorIMG_ARC_PIE);
//рисуем окантовку черным цветом
//для выведенного ранее сектора
imagefilledarc($im$x0$y0$radius*2$radius*2,
    
$begAngle$endAngle,
    
$blackIMG_ARC_EDGED IMG_ARC_NOFILL);
}
?>
Скопировать в буфер

Для обработки данных и построения диаграммы нам не обойтись без соответствующей функции, которой мы будем передавать массив данных, массив цветов, соответствующих каждому элементу массива данных, центр окружности и ее радиус:


<?php
function drawDiagram($dataArray,$colors,$x0,$y0,$radius)
{
global 
$im,$x0,$y0,$black;
//вычисляем количество элементов в массиве данных
$count=count($dataArray);
//получаем сумму всех элементов массива
$sumVal=array_sum($dataArray);
//начнем рисовать сектора с угла 0 градусов
$begAngle=0;
//вычисляем угол для отрисовки первого сектора
$endAngle=floor($begAngle+
((
$dataArray[1]*100)/$sumVal)*360/100);
//рисуем сегмент, соответствующий
//величине первого элемента массива
drawSegment($x0,$y0,$radius,
$begAngle,$endAngle,$colors[1]);
//аналогично поступаем с остальными элементами массива,
//за исключением последнего
for($i=2;$i<$count;$i++)
{
    
$begAngle=$endAngle;
    
$endAngle=floor($begAngle+
        ((
$dataArray[$i]*100)/$sumVal)*360/100);
        
drawSegment($x0,$y0,$radius,
        
$begAngle,$endAngle,$colors[$i]);
}
//рисуем сегмент для последнего элемента массива
$begAngle=$endAngle;
$endAngle=360;
drawSegment($x0,$y0,$radius,
$begAngle,$endAngle,$colors[$count]);
}
?>
Скопировать в буфер

Теперь создадим тестовую диаграмму, используя наши функции:


<?php
$im 
= @ImageCreate (500400);

$white ImageColorAllocate ($im255255255);
$black ImageColorAllocate ($im000);
$red ImageColorAllocate ($im25500);
$green ImageColorAllocate ($im02550);
$blue ImageColorAllocate ($im00255);
$yellow ImageColorAllocate ($im2552550);
$magenta ImageColorAllocate ($im2550255);
$cyan ImageColorAllocate ($im0255255);
$l_grey ImageColorAllocate ($im221221221);

// координаты центра окружности диаграммы
$x0=200$y0=200;
// радиус диаграммы
$radius=100;
//заполняем массив данных и цветов для диаграммы
$dataArray[1]=2$colors[1]=$red;
$dataArray[2]=6$colors[2]=$blue;
$dataArray[3]=10$colors[3]=$green;
//рисуем диаграмму
drawDiagram($dataArray,$colors,$x0,$y0,$radius);
ImagePNG($im);
imagedestroy($im);
?>
Скопировать в буфер

Отображение графика в браузере:


<?php
<img src="diagramma.php">
?>
Скопировать в буфер

Смотрите также: Создание линейного графика

© Copyright 2008-2012 by KDG