Respuesta: Recomendacion para Grafico Documentación no tengo pero hace unas semanas hice una encuesta sencilla con GD2 utilizando una base de datos sobre quien ganaría el mundial, saca dos gráficas, una de barras y otra tipo tarta.
No sé si es la forma más rápida de hacerlo pero funciona perfectamente, te dejo los códigos por si quieres probarlos.
Son 3 archivos, uno que hace la encuesta, otro que inserta en la base de datos y fabrica las gráficas y otro que las muestra (el importante es el segundo):
inicio.php (la encuesta): Código PHP:
<table width="200" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><h4>¿Quién ganará el mundial?</h4></td>
</tr>
<tr>
<td><form id="form1" name="form1" method="post" action="metedato.php">
<p>
<input name="opcion" type="radio" value="espana" />España
</p>
<p>
<input name="opcion" type="radio" value="francia" />Francia
</p>
<p>
<input name="opcion" type="radio" value="brasil" />Brasil
</p>
<p>
<input name="opcion" type="radio" value="alemania" />Alemania
</p>
<p>
<input type="submit" name="Submit" value="Votar" />
</p>
</form></td>
</tr>
<tr>
<td><a href="graficas.php">Ver resultados </a></td>
</tr>
</table>
<?php
if($_GET['resp']==1){
echo '<script type="text/javascript">alert("Voto introducido con exito");</script>';
}
?> metedato.php (base de datos y fabricación de gráficas): Código PHP: <?php
$conexion=mysql_connect('localhost','root','');
mysql_select_db('encuestas',$conexion);
$sql='select * from mundial';
$pet=mysql_query($sql,$conexion);
$dev=mysql_fetch_array($pet);
$espana=$dev['espana'];
$francia=$dev['francia'];
$brasil=$dev['brasil'];
$alemania=$dev['alemania'];
if($_POST['opcion']=='espana'){ $espana++; }
elseif($_POST['opcion']=='francia'){ $francia++; }
elseif($_POST['opcion']=='brasil'){ $brasil++; }
else{ $alemania++; }
$sql='update mundial set espana="'.$espana.'", francia="'.$francia.'", brasil="'.$brasil.'", alemania="'.$alemania.'" where id="'.$dev['id'].'"';
mysql_query($sql,$conexion);
$sql='select * from mundial';
$pet=mysql_query($sql,$conexion);
$dev=mysql_fetch_array($pet);
// Calculo de porcentajes
$total=$dev['espana']+$dev['francia']+$dev['brasil']+$dev['alemania'];
if($dev['espana']==0){
$porespana=0;
}else{
$porespana=($dev['espana']/$total)*100;
}
if($dev['francia']==0){
$porfrancia=0;
}else{
$porfrancia=($dev['francia']/$total)*100;
}
if($dev['brasil']==0){
$porbrasil=0;
}else{
$porbrasil=($dev['brasil']/$total)*100;
}
if($dev['alemania']==0){
$poralemania=0;
}else{
$poralemania=($dev['alemania']/$total)*100;
}
// Creacion de grafica de barras
$img=imagecreate(300,240);
$colorfondo=imagecolorallocate($img,255,255,255);
$color=imagecolorallocate($img,100,100,100);
imagerectangle($img,0,0,299,239,$color);
imagefilledrectangle($img,40,200,70,198-($porespana*2),$color);
imagefilledrectangle($img,100,200,130,198-($porfrancia*2),$color);
imagefilledrectangle($img,160,200,190,198-($porbrasil*2),$color);
imagefilledrectangle($img,220,200,250,198-($poralemania*2),$color);
imagestring($img,2,50,180-($porespana*2),round($porespana).'%',$color);
imagestring($img,2,110,180-($porfrancia*2),round($porfrancia).'%',$color);
imagestring($img,2,170,180-($porbrasil*2),round($porbrasil).'%',$color);
imagestring($img,2,230,180-($poralemania*2),round($poralemania).'%',$color);
imageline($img,0,200,300,200,$color);
imagestring($img,2,37,210,'España',$color);
imagestring($img,2,95,210,'Francia',$color);
imagestring($img,2,158,210,'Brasil',$color);
imagestring($img,2,212,210,'Alemania',$color);
imagejpeg($img,'graficabarras.jpg');
imagedestroy($img);
// Creacion de la grafica de elipse
$gradespana=(round($porespana)*360)/100;
$gradfrancia=(round($porfrancia)*360)/100;
$gradbrasil=(round($porbrasil)*360)/100;
$gradalemania=(round($poralemania)*360)/100;
$img=imagecreate(300,240);
$colorfondo=imagecolorallocate($img,255,255,255);
$color=imagecolorallocate($img,100,100,100);
$color1=imagecolorallocate($img,0,0,255);
$color2=imagecolorallocate($img,0,255,0);
$color3=imagecolorallocate($img,255,0,0);
$color4=imagecolorallocate($img,254,101,0);
$color5=imagecolorallocate($img,0,0,100);
$color6=imagecolorallocate($img,0,100,0);
$color7=imagecolorallocate($img,100,0,0);
$color8=imagecolorallocate($img,146,58,0);
imagerectangle($img,0,0,299,239,$color);
for($i=15;$i>1;$i--){
imagefilledarc($img,150,80+$i,200,100,0,$gradespana,$color1,IMG_ARC_PIE);
imagefilledarc($img,150,80+$i,200,100,0,$gradespana,$color5,IMG_ARC_NOFILL);
imagefilledarc($img,150,80+$i,200,100,$gradespana,($gradfrancia+$gradespana),$color2,IMG_ARC_PIE);
imagefilledarc($img,150,80+$i,200,100,$gradespana,($gradfrancia+$gradespana),$color6,IMG_ARC_NOFILL);
imagefilledarc($img,150,80+$i,200,100,($gradespana+$gradfrancia),($gradfrancia+$gradespana+$gradbrasil),$color3,IMG_ARC_PIE);
imagefilledarc($img,150,80+$i,200,100,($gradespana+$gradfrancia),($gradfrancia+$gradespana+$gradbrasil),$color7,IMG_ARC_NOFILL);
imagefilledarc($img,150,80+$i,200,100,($gradespana+$gradfrancia+$gradbrasil),($gradfrancia+$gradespana+$gradbrasil+$gradalemania),$color4,IMG_ARC_PIE);
imagefilledarc($img,150,80+$i,200,100,($gradespana+$gradfrancia+$gradbrasil),($gradfrancia+$gradespana+$gradbrasil+$gradalemania),$color8,IMG_ARC_NOFILL);
}
imagefilledrectangle($img,20,180,30,190,$color1);
imagestring($img,2,35,179,round($porespana).'% España',$color);
imagefilledrectangle($img,20,210,30,220,$color2);
imagestring($img,2,35,209,round($porfrancia).'% Francia',$color);
imagefilledrectangle($img,160,180,170,190,$color3);
imagestring($img,2,175,179,round($porbrasil).'% Brasil',$color);
imagefilledrectangle($img,160,210,170,220,$color4);
imagestring($img,2,175,209,round($poralemania).'% Alemania',$color);
imagejpeg($img,'graficaelipse.jpg');
imagedestroy($img);
header('Location: inicio.php?resp=1');
?> graficas.php (mostrar las gráficas): Código PHP: <table width="600" border="0" align="center" cellpadding="10" cellspacing="0">
<tr>
<td align="center"><img src="graficabarras.jpg" /></td>
</tr>
<tr>
<td align="center"><img src="graficaelipse.jpg" /></td>
</tr>
<tr>
<td align="center"> <a href="inicio.php">volver a la encuesta</a></td>
</tr>
</table>
|