Рисование графиков на PHP

195
05 марта 2018, 01:36

Как можно рисовать графики в PHP коде? Мне надо, чтобы выглядело примерно так:

Answer 1

Здравствуйте! Очень увлёкся Вашим вопросом, и смог добиться результатов. Получилось похоже на ваш график.

Вот код с комментариями:

<?
$size = 420; // размер холста
$cell = 30; // размер клетки
$padding = 15; // отступ от краёв
$image=imagecreatetruecolor($size, $size);
$cellcolor = imagecolorallocate($image, 200, 200, 200); // цвет клеток
$black = imagecolorallocate($image, 0, 0, 0);
$green = imagecolorallocate($image, 0, 200, 0); // цвет графика
// создадим белый фон 
$back = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, $size - 1, $size - 1, $back);
// сетка
for($i=1;$i<$size/$cell;$i++){
    imageline($image,$i*$cell,0,$i*$cell,$size,$cellcolor);
}
for($i=1;$i<$size/$cell;$i++){
    imageline($image,0,$i*$cell,$size,$i*$cell,$cellcolor);
}
// оси
imageline($image,$size/2,0+$padding,$size/2,$size-$padding,$black);
imageline($image,0+$padding,$size/2,$size-$padding,$size/2,$black);
// стрелки у "y"
imageline($image,$size/2,0+$padding,$size/2-$padding,0+$padding+$padding,$black);
imageline($image,$size/2,0+$padding,$size/2+$padding,0+$padding+$padding,$black);
// стрелки у "x"
imageline($image,$size-$padding,$size/2,$size-$padding-$padding,$size/2-$padding,$black);
imageline($image,$size-$padding,$size/2,$size-$padding-$padding,$size/2+$padding,$black);
// обозначим "x", "y", "0"
imagestring($image, $padding, $size-$padding, $size/2-$padding,  "X", $black);
imagestring($image, $padding, $size/2+$padding, 0+$padding,  "Y", $black);
imagestring($image, $padding, $size/2+$padding/2, $size/2+$padding/2,  "0", $black);
// рисуем методом соединения точек прямыми
$oldx=0;
$oldy=0;
for($i=-1;$i<$size;$i++){
    // $x,$y - абсолютные; $x1,$y1 - относительные
    $x1=($i-$size/2)/$cell;
    $y1=-$x1*$x1+3;// здесь мы задаём функцию. y=-х^2+3
    $x=$x1*$cell+$size/2;
    $y=$size/2-$y1*$cell;
    imageline($image,$x,$y,$oldx,$oldy,$green);
    $oldx=$x;
    $oldy=$y;
}
// не забудьте вывести правильный заголовок!
header('Content-Type: image/png');
// и наконец, вывод 
imagepng($image);
imagedestroy($image);
?>
READ ALSO
PHP проверка массива на пустоту

PHP проверка массива на пустоту

Здравствуйте, появилась паранойя

190
Конвертация сайта в приложение

Конвертация сайта в приложение

Встречаю онлайн сервисы на PHP, которые позволяют указать ссылку на сайт и получить мобильное приложение с webview компонентом с предустановленным...

175
PHPStorm и OpenServer

PHPStorm и OpenServer

Windows 10, фреймворк Yii2 Установил OpenServer, PHPStorm (лицензия)Настроил интерпретатор на PHP7 x64 из OpenServer, работает

296
xdebug в OpenServer и NetBeans

xdebug в OpenServer и NetBeans

Использую php_xdebugdll, который уже лежит в папке modules\php\PHP-7

226