AAA Главная
Примеры 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. Для начала создадим функцию рисования одного сектора круга требуемого цвета с заданным центром, радиусом, начальным и конечным углами:

function drawSegment($x0,$y0,$radius,$begAngle,$endAngle,$color)
{
global $im,$x0,$y0,$black;
//рисуем сектор круга соответствующих размера и цвета
imagefilledarc($im, $x0, $y0, $radius*2, $radius*2,
	$begAngle, $endAngle,
	$color, IMG_ARC_PIE);
//рисуем окантовку черным цветом
//для выведенного ранее сектора
imagefilledarc($im, $x0, $y0, $radius*2, $radius*2,
	$begAngle, $endAngle,
	$black, IMG_ARC_EDGED | IMG_ARC_NOFILL);
}

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

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]);
}

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

$im = @ImageCreate (500, 400);

$white = ImageColorAllocate ($im, 255, 255, 255);
$black = ImageColorAllocate ($im, 0, 0, 0);
$red = ImageColorAllocate ($im, 255, 0, 0);
$green = ImageColorAllocate ($im, 0, 255, 0);
$blue = ImageColorAllocate ($im, 0, 0, 255);
$yellow = ImageColorAllocate ($im, 255, 255, 0);
$magenta = ImageColorAllocate ($im, 255, 0, 255);
$cyan = ImageColorAllocate ($im, 0, 255, 255);
$l_grey = ImageColorAllocate ($im, 221, 221, 221);

// координаты центра окружности диаграммы
$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);

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

<img src="diagramma.php">

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


.

© Copyright 2008-2017 by KDG