Выдача гистограмм на графике с помощью библиотеки GD - PullRequest
0 голосов
/ 14 марта 2012

Я просто хочу знать, как отображать столбцы с точным значением массива данных на моем графике, используя функции библиотеки Gd с циклом for loop / for-each

помощь, безусловно, ценится

Тег комментария в путанице в этом коде указывает на мою проблему

$array = array(
              "Jan" => 110,
              "Feb" => 130,
              "Mar" => 215,
              "Apr" => 81,
              "May" => 310,
              "Jun" => 110,
              "Jul" => 190,
              "Aug" => 175,
              "Sep" => 850,
              "Oct" => 286,
              "Nov" => 150,
              "Dec" => 196);



$width = 600;
$height = 500;
$margin = 20;
$line_width  = $width-($margin*4)-25-15;
$line_height = $width-$margin;


$max_array_value=max($array);
$min_array_value=min($array);

$im = imagecreate($width,$height);

$red = imagecolorallocate($im,225,0,0);
$black = imagecolorallocate($im,0,0,0);
$white  = imagecolorallocate($im, 255, 255, 255);


// Create rectangle with margin color borders 
imagefilledrectangle($im,$margin,$margin,$width-$margin,$height-$margin,$black);


// Create vertical line
for($i=25;$i<=$line_width;$i+=15){
    imageline($im,$margin,$i,$width-$margin,$i,$white);
}

// Create horizontal line
for($i=25;$i<=$line_height;$i+=15){
    imageline($im,$i,$height-$margin,$i,$margin,$white);
}

$j=480;
for($i=$min_array_value;$i<=$max_array_value;$i+=$min_array_value){
    imagestring($im,3,1,$j-=20,$i,$white);
}


//for Start Confusion here
imagefilledrectangle($im,45 ,400,$width-565,$height-20,$red);
imagefilledrectangle($im,60 ,300,$width-550,$height-20,$red);
//for End Confusion here     

header("Content-type:image/jpeg");
imagepng($im);

enter image description here

1 Ответ

1 голос
/ 14 марта 2012

Вам нужно перебрать массив, создавая столбцы с использованием данных. Мой код не является точным, вам придется корректировать параметры, пока столбцы не получатся так, как вы хотите. Попробуйте заменить ваш запутанный раздел на что-то вроде этого:

$n = 0;
foreach($array as $k => $v) {
    imagefilledrectangle($im, ($n * 15) + 45, 400, ($n * 15 + 55), 400 - $v, $red);
    $n++;
}
...