Построение диаграмм средствами GD
28.06.2010
Теги: PHP • Web-разработка
Сегодня практически каждый интернет-ресурс строится на динамическом отображении представленной информации. Давайте рассмотрим одну из таких возможностей, а именно — реализацию динамических диаграмм с использованием библиотеки GD.
Построение гистограммы
Пусть значения столбцов задаются в процентах от 0 до 100 в массиве $rows:
<?php // Значение столбцов от 0 до 100 $rows = array(80, 75, 53, 32, 20); // Ширина изображения $width = 200; // Высота изображения $height = 200; // Ширина одного столбца $rowWidth = 30; // Ширина интервала между столбцами $rowInterval = 5; // Создаем пустое изображение $img = imagecreatetruecolor($width, $height); // Заливаем изображение белым цветом $white = imagecolorallocate($img, 255, 255, 255); imagefill($img, 0, 0, $white); for($i = 0, $y1 = $height, $x1 = 0; $i < count($rows); $i++) { // Формируем случайный цвет для каждого из столбца $color = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255)); // Нормирование высоты столбца $y2 = $y1 - $rows[$i]*$height/100; // Определение второй координаты столбца $x2 = $x1 + $rowWidth; // Отрисовываем столбец imagefilledrectangle($img, $x1, $y1, $x2, $y2, $color); // Между столбцами создаем интервал в $row_interval пикселей $x1 = $x2 + $rowInterval; } // Выводим изображение в браузер, в формате GIF header ("Content-type: image/gif"); imagegif($img); ?>
Результат работы скрипта:
Как видите, скрипт использует значения элементов массива $rows как процентные величины для формирования в цикле for гистограммы. На каждой итерации цикла формируется случайный цвет, который используется для отрисовки очередного столбца гистограммы. Столбец формируется при помощи функции imagefilledrectangle(), которая рисует заполненный прямоугольник.
Построение круговой диаграммы
Пусть доли секторов заданы массивом $row из предыдущего скрипта. При построении круговой диаграммы следует помнить, что в круге 360 градусов, и значения массива $rows следует нормировать таким образом, чтобы их сумма равнялась 360 градусам.
<?php // Значения столбцов от 0 до 100 $rows = array(80, 75, 53, 32, 20); // Нормируем значения массива $rows таким образом, // чтобы их сумма составляла 360 градусов $sum = array_sum($rows); for($i = 0; $i < count($rows); $i++) { $rows[$i] = intval( round($rows[$i]*360/$sum) ); } // Создаем пустое изображение размером 201x201 пикселей $img = imagecreatetruecolor(201, 201); // Определение белого цвет на изображении $white = imagecolorallocate($img, 255, 255, 255); imagefill($img, 0, 0, $white); // Переменные $cx и $cy определяют центр круговой диаграммы $cx = $cy = 100; // Переменные $w и $h определяют ширину и высоту диаграммы $w = $h = 200; $start = 0; foreach ($rows as $value) { // Формируем случайный цвет для каждого сектора $color = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255)); // Определяем конечный угол сектора $angle_sector = $start + $value; // Отрисовываем сектор imagefilledarc($img, $cx, $cy, $w, $h, $start, $angle_sector, $color, "IMG_ARC_PIE || IMG_ARC_EDGED"); // Увеличиваем значение начального угла сектора $start += $value; } // Вывод изображения в окно браузера header ("Content-type: image/gif"); imagegif($img);
Результат работы скрипта:
- Блог на Laravel 7, часть 17. Временная зона для пользователей, деплой на хостинг TimeWeb
- Блог на Laravel 7, часть 16. Роль нового пользователя, сообщение админу о новом посте
- Блог на Laravel 7, часть 15. Восстановление постов, slug для категории, поста и страницы
- Блог на Laravel 7, часть 14. Валидация данных и права доступа при загрузке изображений
- Блог на Laravel 7, часть 13. Загрузка и ресайз изображений для категорий и постов блога
- Блог на Laravel 7, часть 12. Доп.страницы сайта в панели управления и в публичной части
- Блог на Laravel 7, часть 11. Панель управления — назначение ролей и прав для пользователей
Поиск: PHP • Web-разработка • Диаграмма • Библиотека • GD