Hallo, ik wil een grafiek (Stdent mark-distributie) op mijn site tekenen op basis van PHP. Hoe kan ik dit doen?
Antwoord 1, autoriteit 100%
pChartis een andere geweldige PHP-grafiekbibliotheek.
Antwoord 2, autoriteit 57%
<?
# ------- The graph values in the form of associative array
$values=array(
"Jan" => 110,
"Feb" => 130,
"Mar" => 215,
"Apr" => 81,
"May" => 310,
"Jun" => 110,
"Jul" => 190,
"Aug" => 175,
"Sep" => 390,
"Oct" => 286,
"Nov" => 150,
"Dec" => 196
);
$img_width=450;
$img_height=300;
$margins=20;
# ---- Find the size of graph by substracting the size of borders
$graph_width=$img_width - $margins * 2;
$graph_height=$img_height - $margins * 2;
$img=imagecreate($img_width,$img_height);
$bar_width=20;
$total_bars=count($values);
$gap= ($graph_width- $total_bars * $bar_width ) / ($total_bars +1);
# ------- Define Colors ----------------
$bar_color=imagecolorallocate($img,0,64,128);
$background_color=imagecolorallocate($img,240,240,255);
$border_color=imagecolorallocate($img,200,200,200);
$line_color=imagecolorallocate($img,220,220,220);
# ------ Create the border around the graph ------
imagefilledrectangle($img,1,1,$img_width-2,$img_height-2,$border_color);
imagefilledrectangle($img,$margins,$margins,$img_width-1-$margins,$img_height-1-$margins,$background_color);
# ------- Max value is required to adjust the scale -------
$max_value=max($values);
$ratio= $graph_height/$max_value;
# -------- Create scale and draw horizontal lines --------
$horizontal_lines=20;
$horizontal_gap=$graph_height/$horizontal_lines;
for($i=1;$i<=$horizontal_lines;$i++){
$y=$img_height - $margins - $horizontal_gap * $i ;
imageline($img,$margins,$y,$img_width-$margins,$y,$line_color);
$v=intval($horizontal_gap * $i /$ratio);
imagestring($img,0,5,$y-5,$v,$bar_color);
}
# ----------- Draw the bars here ------
for($i=0;$i< $total_bars; $i++){
# ------ Extract key and value pair from the current pointer position
list($key,$value)=each($values);
$x1= $margins + $gap + $i * ($gap+$bar_width) ;
$x2= $x1 + $bar_width;
$y1=$margins +$graph_height- intval($value * $ratio) ;
$y2=$img_height-$margins;
imagestring($img,0,$x1+3,$y1-10,$value,$bar_color);imagestring($img,0,$x1+3,$img_height-15,$key,$bar_color);
imagefilledrectangle($img,$x1,$y1,$x2,$y2,$bar_color);
}
header("Content-type:image/png");
imagepng($img);
$_REQUEST['asdfad']=234234;
?>
Antwoord 3, autoriteit 52%
U kunt het beste php_gd2 opzoeken. Het is een redelijk behoorlijke afbeeldingenbibliotheek die wordt geleverd met PHP (alleen uitgeschakeld in php.ini), en je kunt niet alleen je voltooide afbeeldingen in een paar formaten uitvoeren, het heeft genoeg functies waarmee je vrij gemakkelijk een goede grafiek kunt maken .
EDIT: het kan helpen als ik je een paar handige links geef:
http://www.libgd.org/– U kunt de nieuwste php_gd2
hier
http://ca3.php.net/gd– De php_gd
handleiding.
Antwoord 4, autoriteit 48%
U kunt de grafiek-api van Googlegebruiken om grafieken te genereren.
Antwoord 5, autoriteit 26%
Er zijn een aantal bibliotheken beschikbaar voor het genereren van grafieken.
- Open Flash Cart– Flash gebaseerd
- GraPHPite
- JS-diagrammen– op Javascript gebaseerd
- Libchart
Meer staan hierboven vermeld en hier.
Antwoord 6, autoriteit 22%
Veruit de gemakkelijkste oplossing is om gewoon de Google Chart API te gebruiken
http://code.google.com/apis/chart/
U kunt staafdiagrammen en cirkeldiagrammen maken, 3D gebruiken en het is net zo eenvoudig als het maken van een url met enkele parameters. Zie het eenvoudige voorbeeld hieronder.
Antwoord 7, autoriteit 13%
Er zijn ook verschillende grafische bibliotheken beschikbaar voor PHP om uw leven eenvoudiger te maken. JPGraphis een goede (niet-gratis) versie.
Antwoord 8, autoriteit 4%
Ik heb geen idee van gd2, maar ik heb iets soortgelijks gedaan met gd
en dat was niet zo moeilijk.
Ga naar http://www.php.net/en zoek naar dingen als
- ImageCreate
- beeldlijn
- beeldstring
Het is niet zo flitsend als sommige van die andere oplossingen die er zijn,
maar aangezien u een afbeelding genereert, werkt deze in alle browsers.
(behalve lynx… 🙂 )
/Johan
update: Ik ben bijna vergeten, gebruik geen JPEG voor dit soort foto’s.
De JPEG-artefacten zullen echt irritant zijn,
PNG is een betere oplossing.