Hoe teken je een grafiek in PHP?

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_gd2hier
http://ca3.php.net/gd– De php_gdhandleiding.


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.

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.

Other episodes