begin process at 2013 06 18 09:37:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > HISTOGRAMME EN PHP AVEC GD. PROGRAMMATION OBJET

HISTOGRAMME EN PHP AVEC GD. PROGRAMMATION OBJET


 Information sur la source

Note :
9,5 / 10 - par 8 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :graphique, histogramme, gd, poo, chart Niveau :Expert Date de création :02/07/2005 Date de mise à jour :03/07/2005 10:05:02 Vu / téléchargé :25 057 / 2 230

Auteur : originalcompo

Ecrire un message privé
Site perso
Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
J'ai déposé sur    http://www.phpcs.com/code.aspx?ID=32421
un source qui permet de générer un histogramme de plusieurs séries de chiffres, programmé en objet et basé sur CSS

On m'a fait remarquer à juste titre que la librairie GD existait ;-)
J'ai donc refait le programme avec GD, sauf que:

1) j'ai pris mon objet de base, en est extrait la partie commune
--> oc_listes.php
(contient entre autre le calcul des coordonnées des barres à dessiner)

2) J'en ai déduit les nouvelles classes que j'ai séparé en 2 fichiers
--> oc_histogramme.php pour la version CSS
--> oc_gdhistogramme.php pour la version GD

Du coup, ca fait a mon sens un super exemple de ce à quoi sert la programmation objet...

Comme tout ce que je présente ici se trouve aussi sur mon site perso, et que j'ai pas envi aujourd'hui de me farcir tout en double, vous avez les fichiers en brut, sans commentaire à part dans le code (et dans le source que je cite plus haut, puisqu'après tout, le plus gros du travail était déjà fait)

--> oc_listes.php                  
--> oc_gdhistogramme.php
--> exemple_gd_histogramme.php
--> oc_histogramme.php
--> exemple_histogramme.php
--> test.htm (qui ne se contient que de la partie GD)

Comparez les fichiers d'initialisation de l'histogramme
--> exemple_gd_histogramme.php
--> exemple_histogramme.php
et vous verrez à quel point ils sont similaires !

Pour voir un exemple en 3D, avoir d'autres explications...

http://originalcompo.free.fr
rubrique DIVERS
sous rubrique Programmation Web
lien "class THistogramme et TGDHistogramme"

ou bien ajoutez un commentaire à la source !



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 juillet 2005 10:05:02 :
création d'un dégradé pour la 3D

 Sources du même auteur

Source avec Zip DÉBOGAGE D'UN CODE PHP (SUIVIT DES VARIABLES)
Source avec Zip Source avec une capture GÉNÉRATION D'HISTOGRAMMES EN PHP
Source avec Zip Source avec une capture AFFICHER GÉNÉRIQUEMENT PLUSIEURS FICHIERS DANS IFRAME AVEC 2...

 Sources de la même categorie

GESTION DE FICHIERS par manuche
Source avec Zip CLASSE DE GESTION FTP par bebert2310
Source avec Zip INTYREWRITE - CLASSE ROUTEUR PHP5 PERMETTANT L'URL REWRITING... par sledge00
PHP5 - POO - CLASSE GERANT SESSION par emmanuel_php
Source avec Zip INTYVIEW, GÉNÉRATEUR DE VUE(TEMPLATE) POUR MODÈLES MVC par sledge00

 Sources en rapport avec celle ci

Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
Source avec Zip Source avec une capture METTEZ VOS IMAGES OU VOS PHOTOS EN 3D ; EN PERSPECTIVE par zulrigh
Source avec Zip Source avec une capture [GD] PRÉSENTATION GRAPHIQUE DE DONNÉES : LES POLYGONES par Mr Aliasing
Source avec Zip Source avec une capture SIMPLE ANTISPAM GENERATION 1 - GENERATEUR D IMAGE VIA LA GD ... par Mastronic
Source avec une capture CREATION D'UN HISTOGRAMME IDEAL POUR LES STATISTIQUES [TITRE... par wizard512

Commentaires et avis

Commentaire de coucou747 le 03/07/2005 01:04:57 administrateur CS

je n'ai pas pris le temps de regarder le code (je le ferais sous peu) mais je tiens quand même à dire que quand on fait de la 3d, il faut savoir mettre différentes teintes de couleurs pour montrer les expositions différentes des différentes faces...

Commentaire de originalcompo le 03/07/2005 02:28:45

C'est vraiment pas ça le plus dur...
Dès que j'aurais un moment, je "corrigerais" ça...
A propos, tu dors jamais, toi ?
Bonne nuit !

Commentaire de originalcompo le 03/07/2005 10:07:17

Dégradé rajouté!

Commentaire de coucou747 le 03/07/2005 23:05:19 administrateur CS

pour le someil... question d'habitude...

pour le code, j'ai trouvé quelque chose à redire : tu peux augmenter la vitesse d'exécution de ta class css :
-les doubles guillemets sont à éviter, mieux vaut utiliser les simples, ils sont plus rapide d'exécution.
-les === sont préférables aux == quand les types sont identiques.

sinon, tu peux mettre une troisième couleur comme on voit trois cotés...

Commentaire de originalcompo le 04/07/2005 01:15:43

Bon, pour les côtes et les doubles côtes, t'es dur!
le seul endroit où j'ai laissé les doubles, c qu'il y avait quelque chose à interpréter.
De plus est-ce certain (par exemple) que (même au centième de seconde près sur 100000 itérations)

"</div>\n" : interpréter une chaine de 8 caractères

soit plus lent que

'</div>'."\n" : concatener une chaine de 6 caractères avec
l'interprétation d'une chaine de 2 caractères ?

Sinon, c'est bien de voir les optimisations, mais que penses tu du fond?

Parceque là, c'est comme si tu critiquais "Notre Dame de Paris"
sur les fautes d'orthographe du manuscrit original de Victor Hugo, sans te soucier de l'histoire en elle même.

(PS: je me prends pas pour le victor Hugo de la programmation lol)


Perso, je pense que l'ensemble des 3 scripts est un bon exemple
pour ceux qui connaissent les classes et qui veulent avoir une idée de ce qu'apporte la programmation objet
(et je sais, PHP 4 n’est pas un langage orienté objet !)

C'est pour cette unique raison que j'ai re-publié un nouveau source histogramme, sinon, je l'aurai gardé pour moi, vu le nombre de sources qui doivent faire ca...

(encore que je suis content, j'ai pas trouvé ma représentation sur le site de jpgraph, donc elle a quelque chose d'original !)


Quand à la 3ieme couleur, je laisse ceux qui éventuellement voudraient utiliser ce source faire toutes les modifs qu'ils veulent: trivial pour quelqu'un comme toi, un bon exercice de compréhension pour un débutant... Perso, je trouve que c'est très bien comme ca, et en plus ca a l'air d'etre une norme, en tout cas pour jpgraph qui n'utilise qu'une seule même couleur pour les 2 faces en perspective !

Commentaire de coucou747 le 04/07/2005 09:24:47 administrateur CS

Je n'ai pas dit que cette source était nulle, j'ai dit que j'avais trouvé quelques optimisations !
C'est un bon code, mais on peut faire plus optimisé...
ne le prends pas comme une erreur, prends ça comme une meilleur option...

PS :

'<div>'."\n"
est moins rapide que :
'<div>
'

Commentaire de originalcompo le 04/07/2005 10:53:45

Ne t'en fais pas, je n'ais pas mal interprété ce que tu as écris. Je voulais juste que tu me dises si toi aussi tu trouvais le code interressant d'un point de vue "objet"...

Par contre je connaissais pas l'écriture
'<div>
'

Commentaire de coucou747 le 04/07/2005 11:14:02 administrateur CS

en php, ce qui limite la fin d'une instruction, ce n'est pas le retour à la ligne, c'est le point virgule...

d'un point de vue objet, c'est sur que c'est plus simple pour créer des histogrammes, mais SELON MOI,  un histogramme qui se présenterais sous forme OO devrait avoir plus de possibilitées de personalisations que add_stats... On devrait pouvoir choisir entre 3d et 2d, une échelle, les dimentions, couleurs, légende... Si elle ne reçoit qu'une série statistique, alors une fonction devrait suffire... Une class a plusieurs entrées et plusieurs sorties, je crois que dans ton script, tu as plusieurs entrées, mais une seule sortie, tu devrais proposer CSS/2d/3d, et la, la class serait plus apropriée... Une class doit donc avoir plusieurs sortie, je n'ai pas de grandes conaissances en stats, mais si j'avais fait une class qui cré des histogrammes, je l'aurais appelée stat, elle aurait pu permetre de calculer les moyennes, les médianes, les quartiles, d'afficher  des boites à moustaches, des histogrammes, des camemberts...

Enfin voila, ça reste mon avis, certains programmeurs utilisent des class la ou une fonction de cinq lignes peut faire l'affaire, personellement, je ne fais des class que quand on a plusieurs entrées et plusieurs sorties, tu fais diférement, et c'est pas forcément plus mal, même si les class ne sont pas faites pour ça à l'origine...

Commentaire de originalcompo le 04/07/2005 12:06:54

Là, je suis à OBLIGE de répondre au 2ième paragraphe.

La POO (tu verras ça dans n'importe quel livre) est basée sur 3 principes de base:
- L'encapsulation (présente dans php 5 mais pas dans 4)
- L'héritage
- Le polymmorphisme (simulé dans php)

Tout ca à partir d'une structure appelé "classe"

La programmation objet, c'est une philosophie de programmation, pas un truc destiné à être utilisé à partir de "n" paramètres de sorties, mais au contraire tout le temps (je reviens sur
ce point à la fin du message).

L'introduction de la POO a changé le mode de pensée du programmeur : les données sont maitre de leur contenu, c'est à dire qu'elles se gèrent elles même (fonctions incluses dans l'objet pour le gérer, et non pas fonction externe qui gère les données)

De plus, un des principaux but pour lequel la POO a été introduite est d'avoir un code facilement modifiable, transformable, maintenable, notamment grace à la notion d'heritage.

Hors, j'ai parcouru la semaine quelques uns des codes php les plus populaires du site, et j'en ai ouvert une vingtaine, ceux dont les appréciations étaient bonnes: AUCUN (j'en ai peut-être sauté un, je dis pas) n'utilisait la notion d'héritage, le SEUL des 3 points principaux de la POO présent dans PHP 4 !!!


C'est pour ca que j'ai trouvé que le code fourni pouvait ammener quelque chose d'INSTRUCTIF à la communauté:
il utilise l'héritage, et m'a permis de faire mes modifications en une heure (je ne connaissais pas du tout GD), parceque le code que j'avais écrit était suffisamment générique à la base.


CONCLUSION

1) manipuler des classes ne signifie pas que l'on sait programmer en objet
(c'est comme connaitre connaitre des théorèmes par coeur: on peut savoir s'en servir pour faire des petites démonstrations, mais ca veut pas dire qu'on sait les utiliser pour démontrer des choses compliquées. )

2) je reviens sur les "n sorties" necessaires pour utiliser une classe.
C'est tout à fait faux, et en plus c'est un truc de base qu'on retrouve sur tout les bouquins: la philosophie POO, dans le cas des stats, ce serait créér un objet TDonnees de base sur lequel on va faire toutes les manips de données, et qui va avoir des fonctions abstraites "dessiner()", "inverser()" etc... qui seront implémentées dans des classes descendantes Thistogramme, TCamembert, puisqu'elles seront spécifiques à l'objet descendant...

3) Tes affirmations sur la POO montrent bien que tu à découvert par toi-même la POO à partir de PHP, et pas à partir d'un vrai langage OO, je te conseilles donc de lire un bouquin qui en parle, parceque là, t'es en train de prendre de très mauvaises habitudes, exactement comme moi quand j'utilise des "<div>" au lieu '<div>', sauf que je pense sincèrement que c'est un peu plus grave dans ton cas, vu que c'est une erreur de raisonnement: tu vas exactement à l'inverse de la philosophie OO ...

Cordialement
OC.

Ceci dit en toute amitié, perso, même si je râle quand on me dit d'utiliser telle ou telle méthode plutôt qu'une autre parcequ'on gagne 1/100 de seconde au bout de 100000 itérations, je fini quand même par le faire...
Et depuis un mois que je me suis mis à PHP, je suis pas tombé sur un seul script qui utilisait l'héritage, à part des tutoriaux sans but précis, donc c'est normal si on a pas fait de POO avec un vrai langage OO de ne pas savoir tout ca. Normal mais vraiment dommage.

Commentaire de coucou747 le 04/07/2005 12:39:32 administrateur CS

lol, je n'ai fait qu'exprimer mon point de vue...
je n'ai pas découvert la POO en php, mais en C++...
On ne programme pas de la même façon, mais j'ai déja croisé des programmeurs qui comme toi mettent des classes partout...
Moi, personellement, je mets des structs en C++, et ça ne me dérance pas plus que ça, c'est une fonctionalitée comme une autre... (et ne dis pas que la struct est au c++ ce que le goto est à la programmation !)
je fais aussi de la POO en javascript.
J'aimes bien le php, pour mon blog, j'avais fait une class Page, on pouvait ajouter des commentaire a travers une fonction, on pouvait voter pour un sondage, on pouvait la suprimer... Elle pouvait s'afficher, elle pouvait afficher un sondage et des RSS...

quand tu portes un code C++ en code C, tu transformes chaque class en une struct et plein de fonctions, donc ta class a plein de sorties... On ne devrait pas pouvoir transformer une class en une seule fonction, la, on peut faire une fonction dessiner_histogramme($array_stat, $array_couleurs, $dimx, $dimy); dans un livre de C++, on ne voit pas de class miauler, on voit une class chat héréditaire de la class animaux...

Commentaire de originalcompo le 04/07/2005 13:09:29

C'est vrai qu'on ne voit pas les choses du même point de vue:
"une class chat héréditaire de la class animaux..."

Moi je suis partie du principe qu'un Histogramme, c'etait plusieurs listes de points, et qu'une liste de points... c'est une liste de points !

j'ai donc fait une classe histogramme (TGDHistogramme) héreditaire de la classe
liste de points pour histo (TListePourSerieHisto) héréditaire de la classe "données" (TListeSimple)

Si je dois faire un camenbert, je ferais une classe Camembert (TGDCamenbert) héréditaire de la classe "données" (TListeSimple)

Ah, euhhh... et elle est où la différence avec ton chat ?

Bon, allez, je laisse tomber, d'toute facon, c'est vrai que parler d'objet avec php 4, c'est n'importe quoi... en tout cas j'suis content de m'être tromper et d'apprendre que t'as fait de l'objet ailleurs, n'empêche que pour ceux qui connaissent pas l'objet, le code est quand même un bon tuto à mon sens...

Commentaire de coucou747 le 04/07/2005 13:24:19 administrateur CS

c'est une bonne source, je ne dis pas le contraire, j'ai simplement dit que je n'aurais pas utilisé l'objet ici...
mon chat peut miauler, manger, se nourrir, bouger, griffer...
ta liste de point, bah elle a une moyenne, une médiane, un écartype, elle peut être une class!
ton histogramme, il peut s'afficher et c'est tout !
évidement, il peut s'afficher de plusieurs façons, mais ça pourrait être un paramètre de fonction... voila, la diférence avec mon chat...

Commentaire de originalcompo le 04/07/2005 13:38:44

On peut quand même trouver des avantages à l'utilisation d'une classe sur une simple fonction:

Si on met de coté la partie OO, et qu'on se consacre à ce que sait faire PHP 4, la classe en tant que "structure" est plus pratique ne serais-ce que parcequ'elle permet de saisir les paramètres de manière plus intuitive, pourvu qu'on lui donne des noms suffisement parlants.

En effet, pour appeler une fonction de 10 parametres , il faut se rappeler l'ordre, etc...
Si ces paramètres sont des proprietes d'une classe, c'est plus parlant et plus joli !

Sans compter que pour dessiner, il faut une fonction principale, ok, mais qui en appelle quelques autres: si je mets tous dans une seule procedure, je ne peux plus re-utiliser la partie commune à la gestion de l'histo en css et l'histo en GD, et je dois tout re-ecrire (copier coller, si bug trouve corriger en 2 endroits...).
Donc plusieurs fonctions avec encore passage de plein de parametres...

Bref, la classe, c'est plus "class" ;-)

Commentaire de o00zeus00o le 12/07/2005 09:10:38

Bon travail, continue ;)

Commentaire de coucou747 le 05/02/2006 14:39:35 administrateur CS


"Bref, la classe, c'est plus "class" ;-)"=> si c'est juste l'effet de mode...

Commentaire de rlftova le 18/04/2006 23:11:16

Une petite question de néophite. Comment puis-je inclure des variables PHP au lieu de mettre directement des chiffres ?
Merci

Commentaire de coucou747 le 19/04/2006 13:22:40 administrateur CS

tu remplaces les chiffres par ta variable...

Commentaire de rlftova le 19/04/2006 19:11:27

J'y avais pensé mais ca ne marche pas ! Il doit y avoir quelque chose qui m'échappe !
Quand je fais :
$h1->init(204,204,204,
          "série 1",
          array($valeur[$annee1], $valeur[$annee2]));
Pas moyen d'afficher les barres, ca me laisse une image plate.
Merci
A+

Commentaire de coucou747 le 19/04/2006 19:34:23 administrateur CS

je n'ai pas regardé le code depuis longtemps mais quand tu remplace un nombre par une variable, alors ça ne change rien...

fais un echo $var, gettype($var); pour vérifier que ta variable est corecte...

Commentaire de rlftova le 21/04/2006 14:19:33

Bonjour,
encore moi. La variable ne s'affiche pas, mais quand je veux faire un include du fichier dans lequel sont les variables, c'est l'image qui ne veut plus s'afficher.
As-tu une solution ???
Merci

Commentaire de coucou747 le 22/04/2006 13:24:27 administrateur CS

envoi ton code à coucou747@hotmail.com, je t'aiderais volontier....

mais si la variable ne s'affiche pas, c'est qu'elle n'existe pas...

vérifie aussi que dans ton include, tu n'affiches pas de texte : en http, une requette  renvoi un seul fichier...

Commentaire de _klesk le 15/02/2008 21:43:51 9/10

Une petite question a poser a l'auteur de cette source.

dans cette partie du code, ou est afficher et/ou a quoi sert "serie1", j'ai beau modifier le text ca ne change rien du tout.
Une petite explication ?

    * $h1 = new TGDListeCouleur;
    * $h1->init(255,0,255,
    * "série 1",
    * array(50, -20, 30, 7, 12));
    * $maitre->add($h1);
Seconde question (je planche dessus mais a tout hasard je pose la question) :
comment decaler les chiffre de facon a rendre un poil plus claire la lecture.

D'avance merci. et 9/10 pour le fait du serie1,serie2,serie3,... qui (ne semble) servir à rien.

Commentaire de _klesk le 16/02/2008 00:36:24

Bon il faut laisser tomber la seconde question, je ne voyait pas les chose correctement.

Cependant, j'aimerai afficher (par Ex:) les mois sous les chiffes que je récupèrent, les mois ou du texte différent fct de chaque barre me suis-je bien fait comprendre ?




_   _       _
| | | |  _  | |
| | | | | | | |    (Bon faut imaginer que c'est l'histogramme).
| | | | | | | |
|_| |_| |_| |_|

4    4   2   5
jan fev Mar Avr

Il me faudrait quelque chose comme ça !

Merci.

Commentaire de originalcompo le 21/02/2008 11:12:57

Salut,

Pour le "serie 1", "serie 2"... les valeurs sont gérés dans le init de l'objet, et stockées dans "legende"

La 1ère version de cette classe d'histogramme utilisait des balises <div>, et j'utilisais le champ "legende" dans la propriété "alt" de la balise <div>.

En gros, l'info apparaissait lorsqu'on passait la souris sur une barre (il y avait le nom de la série suivi de la valeur entre parenthèses)

Dans la 2ième version qui est ici, j'ai ré-utilisé un tronc commun objet, mais je n'ai effectivement pas géré cette valeur, donc tu as parfaitement raison, ca ne sert à rien, je ne m'en étais pas rendu compte d'ailleurs

PS: les 2 versions du code se trouvent sur mon site,
http://mywebdev.free.fr/PHP/index.php

Commentaire de rlftova le 22/02/2008 11:11:53

Bonjour,

j'aurais juste une question :

comment exploiter cette source avec dans les array des variables en boucle.
par exemple $y correspond à une année, $variable correspond à ma variable, $variable[$y] étant la valeur de ma variable pour l'année $y. Comment générer le tableau avec un for ($y=$annee1;$y<=$annee2;$y++) ?

merci.

Commentaire de softwareds le 08/05/2008 16:51:00 9/10

Très bonne source, j'ai juste dû ajouter la gestion des mois pour obtenir ce que je recherchais.
Bravo et merci.

Commentaire de crazygogo le 07/08/2008 15:05:30

il existe ArtiChow : http://www.artichow.org

je fais de la pub pour ma source mais elle permet de générer de graphiques vraiment très simplement, il suffit de renseigner des tableaux avec les données en provenance de la BDD....

http://www.phpcs.com/code.aspx?ID=47171

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

graphique, histogramme, diagramme... [ par jbardet ] Bonjour,Je souhaite créer des digramme de stat en php (+ exactement avec smarty) mais deja si j'y arrive en php ça le ferait!Mon problème:J'ai trouvé erreur jpgraph.php [ par jerfel ] Salut, j'ai telecharger jpgraph mais je sais pas comment faire un graphique relatif à ma base de données SVP aidez moi... comment faire pour: activer nombrea aléatoire avec interface graphique [ par wiwi999 ] je veux le code source de jeu nombre aléatoire avec une interface gaphique !!! diagramme de classe vers un langage POO ???? [ par marwen109 ] bonjour,[^^happy17] comment passer d'un diagramme de classe vers un langage de poo comme php5 ou c++.... par exemple diagramme de classe: un employ programmation graphique avec netbeans php [ par omarzougui1 ] [size=300]php[/size] est il possible de créer l'interface de page web (boutton , champ de texte , formulaire et autre composant ...) en mode graphiqu histogramme d'une bd en php [ par minouchamaya ] slt j'ai un problème quand je fait le code ph pour faire un statistique pour un bd en php il m'affiche : <html xmlns="http://www. histogramme [ par mansourti ] Bonjour, voila un code php que j'é fait pour afficher un tableau histogramme qui montre les top 10 numéro internationale par leurs durée d'appel d'un Fonctions statiques en PHP (POO) [ par begueradj ] Azul, J'ai une question un peu bête: J'ai tendance à utiliser massivement les fonctions statiques déclarées dans mes classes: pensez-vous que c'est génération d'un "Book" graphique à partir d'info text,xml,ou base... [ par RV2931 ] Bonjour, J'aurai besoin de générer un book de présentation d'un groupe de musique, autrement appelé Press Book. Etant donné qu'il faut le mettre à jo Interface graphique : compatibilité avec ie [ par mailliam ] Bonjour à tous, je viens à vous car là je suis 6 pieds sous terre! je fais une sorte de jeu par navigateur, tout fonctionnait bien jusqu'à ce que je c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,903 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales