Cirkeldiagram met database gegevens

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Keizer

Jan Keizer

27/05/2015 20:24:18
Quote Anchor link
Hallo allemaal,

Ik ben voor school bezig met een website en ik wil een zogenaamde 'pie chart' op mijn site hebben. Deze chart moet aangeven hoeveel procent van de gebruikers van het systeem mannelijk of vrouwelijk zijn. Dit staat aangegeven onder de table "geslacht' en als waarde heeft het m of v. Nu wil ik niet om een code vragen, maar om advies. Is zo'n dergelijke chart wel mogelijk als ik van 'count' gebruik moet maken, en moet ik hier google charts (of een ander soort) voor gebruiken?

Alvast bedankt.
Gewijzigd op 27/05/2015 22:26:02 door Jan Keizer
 
PHP hulp

PHP hulp

29/03/2024 13:09:05
 
Ward van der Put
Moderator

Ward van der Put

27/05/2015 21:59:55
Quote Anchor link
Google Charts ;)

https://google-developers.appspot.com/chart/interactive/docs/gallery/piechart

Maar de visualisatie is maar de helft van het probleem: je moet die grafiek ook nog van de juiste data voorzien. Als je die count() eenmaal op orde hebt, denk ik dat je de uitkomst daarvan voor een schoolopdracht best met Google Charts mag weergeven.
 
Johan K

Johan K

27/05/2015 22:56:34
Quote Anchor link
Hoewel google charts makkelijk te gebruiken is, kijk ook nog eventjes naar Chart.js, iets lastiger in gebruik maar vind persoonlijk wel dat er mooiere grafieken uitkomen.

http://www.chartjs.org/docs/#doughnut-pie-chart
Gewijzigd op 27/05/2015 22:58:40 door Johan K
 
Thomas van den Heuvel

Thomas van den Heuvel

27/05/2015 22:57:20
Quote Anchor link
database --[query]--> data in php --[data formatteren voor verdere verwerking]--> grafisch programma --[genereren/bouwen output]--> scherm.

Splits het op in deelproblemen.
 

28/05/2015 10:59:05
Quote Anchor link
D3.js

Of in PHP een image genereren met de GD library en die serveren.
http://php.net/manual/en/image.examples-png.php
 
Jan R

Jan R

28/05/2015 14:41:06
Quote Anchor link
Ik heb 1tje zelf geschreven voordat ik library's vond.
De include is voor een array van kleuren te hebben.
$alleKleuren=imagecolors($im);
met deze link krijg je dan dit resultaat

http://www.janr.be/toernooien/taart.php?v=10,5,2,6&text=testje
vb: Afbeelding
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
    //maak een rondgrafiekje
    header("Content-Type: image/png");
    include_once ('../php/functions.php');
    
    $tekst = html_entity_decode($_GET['text'],ENT_QUOTES,"UTF-8");
    $value = $_GET['v'];
    $values= explode(',', $value);
    $totaal = 0;
    for($n=0;$n<count($values);$n++){
        $totaal+=$values[$n];
    }

    $im = @imagecreate(300, 320) or die("Cannot Initialize new GD image stream");
    $background_color = imagecolorallocate($im, 1, 1, 1);//eerste aanroep = achtergrond kleur
    $alleKleuren=imagecolors($im);
    imagecolortransparent($im, $background_color);//$background_color
    $text_color = $alleKleuren['black'];
    
    $kleuren=array(
        $alleKleuren['green'],//gewonnen
        $alleKleuren['yellow'],//remise
        $alleKleuren['red'],//verloren
        $alleKleuren['pink'],//forfait gekregen
        $alleKleuren['cyan']//forfait gegeven
    );
    for ($n=count($kleuren);$n<count($values);$n++){
        $kleuren[] = $alleKleuren[array_rand($alleKleuren)];
    }

    $einde=0;    
    $delta=pi()/180;    
    for($n=0;$n<count($values);$n++){
        if($values[$n]>0){
            $start=$einde;
            $taartHoek=(360/$totaal*$values[$n]);
            $einde=$start+$taartHoek;
            imagefilledarc ($im, 150, 150, 250, 250,  $start, $einde, $kleuren[$n],IMG_ARC_PIE);
            $phi = $delta * ($einde-($taartHoek/2));
            $cx = 100+100*cos($phi);
            //helft (image/2) -50 marge van 25 per kant
            $cy = 100+100*sin($phi);
            imagestring($im, 5, $cx+50, $cy+50, $values[$n] , $alleKleuren['black']);
        }
    }

    imagettftext ($im,16,0,80,300,$text_color,'TIMES.TTF',$tekst);
    //imagestring($im, 5, 100, 300,  $tekst, $text_color); //param 2 = fontsize 1-5
    imagepng($im);
    imagedestroy($im);
?>
Gewijzigd op 28/05/2015 18:35:44 door Jan R
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.