Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Построение графика


Автор: PARROT 5.3.2006, 21:22
Вот, написала голосование http://pk.traktora.spb.ru/index.php?page=comment&idp=92 (как у нас на форуме!), появилась проблема, как вывести его в виде графика, результаты в процентах?
Искала в поиске, нашла класс, но не понимаю.
Разжуйте пожалуйста, насколько это возможно.
Спасибо.
В книге РНР написано очень много, ну просто очень много. Может есть маленький примерчик?
За что буду благодарна. Спасибо!

Автор: Illuminaty 5.3.2006, 22:36
PARROT, результаты нужно в виде графика или в виде диаграммы?
Если второе, то диаграмма выводится div'ами, помещенными в контейнер (можно тоже div), и их высота (ширина) задается в процентах от высоты (ширины) контейнера.
Удачи!

Автор: PARROT 5.3.2006, 22:52
В виде полосочек. Мне бы примерчик. smile

Автор: gAnton 6.3.2006, 02:18
проблема в том, чтобы создать динамическую картинку средствами php или в том, чтобы посчитать высоту этих столбцов?
по большому счету это простейшая математика, а картинка создается примерно так(просто кусок из кода в качестве примера, переменные не определены):
Код

$new_image=imageCreateTrueColor($w, $h);

//выделяем цвета для рисования в картинке по rgb составляющим
$c_white=imageColorAllocate($new_image, 255, 255, 255);
$c_black=imageColorAllocate($new_image, 0, 0, 0);
$c_blue=imageColorAllocate($new_image, 0, 0, 255);
$c_green=imageColorAllocate($new_image, 0, 255, 0);
$c_red=imageColorAllocate($new_image, 255, 0, 0);
$c_gray=imageColorAllocate($new_image, 196, 196, 196);

//заполняем белым фоном прямоугольник картинки
imagefilledrectangle($new_image, 0, 0, $w, $h, $c_white);

//пример отрисовки линии красным цветом
imageline($new_image, 30, 15+$y_scale*$delta, 33, 15+$y_scale*$delta, $c_red);

//ну и так далее всякие операции рисования. а конце:
Header("Content-type:image/png");
imagePng($new_image);

Автор: PARROT 6.3.2006, 19:07
Ну вот, нарисовала, но проблема появилась:
Отдельно от кода полосочки рисуются без проблем, а вот в коде, на эту строку:
Код

ImagePng ($im); 

выдается вот такая красота:
Код

подождать [ 2 ] ‰PNG  IHDRИ›{СPLTEяяяUВУ~DIDATxњcшЏ 0@Ё иЂ‘dF22їађQjtА!Гф— KGN\nаДeљB.·ЩбТГ@Lи`„B’Љ”eЬгIEND®B`‚ 
нет [ 4 ] ‰PNG  IHDRИ›{СPLTEяяяUВУ~BIDATxњcшЏ 0 s~0 #Й2Њ 8dм”ађQtА!cУЃKF©Ј‡ S'.·1uв4-—Ыd”pй!!tPВУаАБ‡µБIEND®B`‚ 
да [ 2 ] ‰PNG  IHDRИ›{СPLTEяяяUВУ~DIDATxњcшЏ 0@Ё иЂ‘dF22їађQjtА!Гф— KGN\nаДeљB.·ЩбТГ@Lи`„B’Љ”eЬгIEND®B`‚ 
Всего голосов: 8 

Почему, я пока не поняла.
Добавлено @ 19:11
Сам код:
Код

//запрос общего количества голосов
                            $query="select * from opros WHERE id_opr='$idp'";
                            $result=mysql_query($query);
                            $num_vot=mysql_num_rows($result);
                            //подсчет общего количества голосов
                            $total_votes=0;
                            while($row=mysql_fetch_object($result))
                            {
                            $total_votes+=$row->numb;
                            }
$prosmotr=mysql_query("SELECT id_opr,otvet,numb FROM opros WHERE id_opr=$idp");
while($vivod=mysql_fetch_row($prosmotr)){

?>
<table width=300 border cellspacing=0>
<tr>
<td width=100><?=$vivod[1];?></td><td width=20>[ <b><?=$vivod[2];?></b> ]</td>
<td>
<?
//начало графика
$height=15;
$width=200;
$im=ImageCreate($width,$height);
$white=ImageColorAllocate($im,255,255,255);
$black=ImageColorAllocate($im,0,0,0);
ImageFill($im,0,0,$white);
imagerectangle($im,0,0,199,14,$black);
$x=$vivod[2]/$total_votes*200;
imagefilledrectangle($im,0,0,$x,15,$black);
$out=$x/2;
$out = $out."%";
ImageString($im,2,200-30,1, $out, $black);
Header ('Content-type: image/png');
ImagePng ($im);
ImageDestroy($im);
//конец графика
?>
</td>
</tr>
<?
}
?>
<tr>
<td colspan=3 align=center>Всего голосов: <?=$total_votes;?></td>
</tr>
</table>

Добавлено @ 19:22
вот пример чего оно рисует вместо графика: http://pk.traktora.spb.ru/index.php?page=comment&idp=92

Автор: PARROT 6.3.2006, 21:22
Всем спасибо, заработало. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)