Это часть статьи, посвященной работе с графологической библиотекой PHP, а именно с GD2.
Статья довольно распространенная и пространная. Я взял из не только кусок посвященный построению линейного графика.
Как есть скрипт у меня не заработал. В итоге я внес в тело скрипта переменные с цветами и поднял второй for в функции draw_grid на уровень первого.
Таким образом далее будет пример простого php-скрипта который генерирует линейные графики по заданным координатам.
И пример графика, который он генерирует.
<?php header("Content-type: image/png"); function draw_axises($im_width,$im_heignt) { global $im, $black, $l_grey, $x0, $y0, $maxX, $maxY; $x0=25.0; //начало оси координат по X $y0=20.0; //начало оси координат по Y $maxX=$im_width-$x0; //максимальное значение оси координат по X в пикселах $maxY=$im_heignt-$y0; //максимальное значение оси координат по Y в пикселах imageline($im, $x0, $maxY, $maxX, $maxY, $black); //рисуем ось X imageline($im, $x0, $y0, $x0, $maxY, $black); //рисуем ось Y //рисуем стрелку на оси X $xArrow[0]=$maxX-6; $xArrow[1]=$maxY-2; $xArrow[2]=$maxX; $xArrow[3]=$maxY; $xArrow[4]=$maxX-6; $xArrow[5]=$maxY+2; imagefilledpolygon($im, $xArrow, 3, $black); //рисуем стрелку на оси Y $yArrow[0]=$x0-2; $yArrow[1]=$y0+6; $yArrow[2]=$x0; $yArrow[3]=$y0; $yArrow[4]=$x0+2; $yArrow[5]=$y0+6; imagefilledpolygon($im, $yArrow, 3, $black); } function draw_grid($xStep,$yStep,$xCoef,$yCoef) { global $im,$black,$l_grey,$x0,$y0,$maxX,$maxY; $xSteps=($maxX-$x0)/$xStep-1; //определяем количество шагов по оси X $ySteps=($maxY-$y0)/$yStep-1; //определяем количество шагов по оси Y for($i=1;$i<$xSteps+1;$i++) //выводим сетку по оси X { imageline($im, $x0+$xStep*$i, $y0, $x0+$xStep*$i, $maxY-1, $l_grey); //при необходимости выводим значения линий сетки по оси X ImageString($im, 1, ($x0+$xStep*$i)-1, $maxY+2, $i*$xCoef, $black); } for($i=1;$i<$ySteps+1;$i++) { imageline($im, $x0+1, $maxY-$yStep*$i, $maxX, $maxY-$yStep*$i, $l_grey); //при необходимости выводим значения линий сетки по оси Y ImageString($im, 1, 0, ($maxY-$yStep*$i)-3, $i*$yCoef, $black); } } function draw_data($data_x,$data_y,$points_count,$color) { global $im,$x0,$y0,$maxY,$scaleX,$scaleY; for($i=1;$i<$points_count;$i++) { //рисуем линейный график по точкам из массивов данных imageline($im, $x0+$data_x[$i-1]*$scaleX, $maxY-$data_y[$i-1]*$scaleY, $x0+$data_x[$i]*$scaleX, $maxY-$data_y[$i]*$scaleY, $color); } } //создаем рисунок шириной 500 и высотой 400 пикселов $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, 200, 200, 200); draw_axises(500,400); //рисуем оси координат //задаем массивы данных графиков $x1[0]=1; $y1[0]=1; $x1[1]=2; $y1[1]=4; $x1[2]=3; $y1[2]=8; $x1[3]=4; $y1[3]=16; $x2[0]=1.5; $y2[0]=2; $x2[1]=2.5; $y2[1]=3; $x2[2]=3.5; $y2[2]=9; $x2[3]=4.5; $y2[3]=17; //объединяем данные из массивов данных для вычисления масштаба $x=array_merge($x1,$x2); $y=array_merge($y1,$y2); //получаем максимальные значения элементов для каждого массива $maxXVal=max($x); $maxYVal=max($y); //вычисляем масштаб преобразования данных в координаты рабочей области $scaleX=($maxX-$x0)/$maxXVal; $scaleY=($maxY-$y0)/$maxYVal; //задаем шаг для координатной сетки в пикселах $xStep=30; $yStep=30; //рисуем координатную сетку draw_grid($xStep,$yStep, round($xStep/$scaleX,1), round($yStep/$scaleY,1), true); draw_data($x1,$y1,20,$green); //рисуем первый график draw_data($x2,$y2,20,$blue); //рисуем второй график ImagePNG($im); //выводим рисунок imagedestroy($im); //освобождаем занимаемую рисунком память ?>
Кстати в качестве координат констант можно подать рандомные значения:
$x1=Array(); $y1=Array(); $x2=Array(); $y1=Array(); for ($i=0;$i<20;$i++) { $x1[]=rand(0,20); $x2[]=rand(0,20)/2; $y1[]=rand(0,20); $y2[]=rand(0,20)/2; }
Тогда на графиках будут "графики" похожие на некоторые дефолтные заставки WinXP.
Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">