Время от времени в PHP приходится строить различные графики. Это могут быть графики посещаемости сайта или статистика регистраций в зависимости от дня недели. В данной статье я покажу код функции, которая занимается созданием графиков на PHP .
Время от времени в PHP приходится строить различные графики. Это могут быть графики посещаемости сайта или статистика регистраций в зависимости от дня недели. В данной статье я покажу код функции, которая занимается созданием графиков на PHP.
Привожу прокомментированный код функции, которая строит график на PHP:
<?php
function drawPlot($x, $y, $width, $height) {
/* Узнаём количество пикселей на единицу шкалы по X и по Y */
$p_one_x = $width / (max($x) - min($x));
$p_one_y = $height / (max($y) - min($y));
/* Узнаём местоположение "нулевых" координат */
if (min($x) >= 0) $c_x = 1;
else $c_x = abs(min($x)) * $p_one_x;
if (min($y) >= 0) $c_y = $height - 2;
else $c_y = $height + min($y) * $p_one_y;
/* Превращаем координаты из одной системы (нам привычной) в другую (для компьютера) */
$p_x = array();
$p_y = array();
for ($i = 0; $i < count($x); $i++) {
$p_x[$i] = round($c_x + $x[$i] * $p_one_x);
$p_y[$i] = round($c_y - $y[$i] * $p_one_y);
}
$im = imageCreateTrueColor($width, $height); // Создаём изображение
$color = imageColorAllocate($im, 255, 255, 255); // Создаём белый цвет
imageFilledRectangle($im, 0, 0, imageSX($im), imageSY($im), $color); // Рисуем прямоугольник
$color = imageColorAllocate($im, 0, 0, 0); // Создаём чёрный цвет
/* Рисуем оси координат */
imageLine($im, $c_x, $c_y, $c_x, imageSY($im), $color);
imageLine($im, $c_x, $c_y, $c_x, 0, $color);
imageLine($im, $c_x, $c_y, imageSX($im), $c_y, $color);
imageLine($im, $c_x, $c_y, 0, $c_y, $color);
/* Рисуем первую точку */
imageArc($im, $p_x[0], $p_y[0], 10, 10, 0, 360, $color);
/* В цикле проходим по всем точкам, рисуем их и соединяем линиями */
for ($i = 1; $i < count($p_x); $i++) {
imageLine($im, $p_x[$i - 1], $p_y[$i - 1], $p_x[$i], $p_y[$i], $color);
imageArc($im, $p_x[$i], $p_y[$i], 10, 10, 0, 360, $color);
}
/* Выводим изображение */
header("Content-type: image/png");
imagePng($im);
imageDestroy($im);
}
/* Массив координат */
$x = array(0, -1, -2, -3, 4, 6);
$y = array(0, 1, 4, 9, 16, -36);
drawPlot($x, $y, 600, 600); // Вызываем функцию
?>
Код очень сырой, здесь нет огромного количества проверок и не разобраны частные случаи. Но задача данного кода направить Вас в правильное русло. Добавлю, что, как обычно, на такую популярную задачу, как создание графиков в PHP, есть огромное количество готовых скриптов с огромным функционалом. Но использовать я их не стоит.
Делайте свои скрипты ровно с тем набором возможностей, которые Вам необходимы. А пример такой функции Вы уже посмотрели в данной статье.
