Fiche javascript : Création de Graphiques
Objet de la fiche
Présentation et mise en oeuvre d'un graphique de données. Merci à http://www.lutanho.net/diagram/
Etat de la fiche : 
Plan de la fiche :
Avant propos :
On peut avoir besoin de présenter certaines informations sous forme de graphiques. Cela permet d'attirer
l'attention des Internautes sur des points bien particuliers que vous désirez mettre en valeur
La conception d'un graphique en Javascript
n'est pas toujours aisée. Parmi tous les graphiques proposés sur Internet j'ai retenu cet objet pour la richesse de ses possibilités,
sa souplesse et la fiabilité d'affichage quelles que soient les valeurs des données et des échelles utilisées. Le paramétrage est
d'un premier abord un peu délicat, mais une fois le mécanisme assimilé on appréciera toutes les possibilités de cet objet et cela
rentre bien dans le cadre général de ces tutoriaux.
Cette fiche vous propose d'intégrer et de paramétrer très facilement un modèle de graphique simple et professionnel.
Les possibilités
Voici des exemples obtenus à partir du modèle qui est proposé. Ces divers exemples et leurs modes de paramétrages seront détaillés ci-dessous.
Comment l'intégrer
Récupérer les éléments javascript
- Cliquez pour récupérer le fichier compressé Graphe.zip :

- copier ce fichier dans un emplacement de l'arborescence de votre site.
- Décompresser le fichier.
- vous devez obtenir le résultat suivant :

Le fichier diagram.js est le moteur principal et contient tous les objets nécessaires à la génération des graphes.
Les fichiers contenus dans le répertoire Images sont les images utilisées pour certains types de graphes comme le type Box ou pour arrière plan.
Installer les éléments principaux dans votre page html
Nous allons continuer avec l'exemple précédent (graphique MonTest)
Dans ce qui suit 'Chemin à partir de votre page html/'
est la description du chemin entre l'emplacement de la page html ou l'on va inclure le ou les
graphiques et le répertoire Graphe contenant le fichier de personnalisation MonTest.js.
Entre <head> et </head>
<script type="text/javascript">src="Chemin à partir de votre page html/Graphe/diagram.js'</script>
Entre <body> et </body>
<div style= "position:relative; top:0px; left:20px"> |
div est nécessaire pour obtenir un positionnement homogène avec tous les navigateurs. |
<script type="text/javascript"> |
|
var Obj_xxx = new Diagram(); |
Définition de l'objet graphe. |
xxxxxxxxxxxxxxxxxxxxxx |
Paramètres de personnalisation du graphe. |
Obj_xxx.Draw(); |
Tracé du graphe. |
var Bx = new Box |
Génération des objets de données |
</script> |
|
</div> |
|
Paramétrer et personnaliser le graphe
Généralités
On donne ici toutes les informations permettant d'utiliser au mieux les fonctions disponibles avec cet objet. A vous de les
adapter à votre projet, voire de définir des structures différentes pour ces fichiers.
Génération du graphe (cadre, axes, échelles, style)
Il faut d'abord définir l'objet Obj_xxx = new Diagram() puis utiliser les
propriétés et méthodes de l'objet pour le paramétrage et la génération du cadre,
des axes, échelles et style.
Objets |
Conventions d'instanciation de l'objet |
Diagramme de type barres |
Obj_Barres = new Diagram(); |
Diagramme de type box |
Obj_Box = new Diagram(); |
Diagramme de type lignes |
Obj_Lignes = new Diagram(); |
Diagramme de type pie |
Obj_Pie = new Diagram(); |
Diagramme de type pixels |
Obj_Pixel = new Diagram(); |
Propriétés
de l'objet instancié |
Actions |
Exemples |
Obj_xxx.SetFrame(position coin gauche, position coin haut, position coin droit, position coin bas); |
Numérique : Positions et Dimensionnements du graphe en pixels |
Obj_xxx.SetFrame(40, 0, 130, 150); positionnera le graphe à 40 pixels à partir de la gauche et 0 pixel à partir du haut. La dimension sera de 130-40 = 90 pixels en largeur et 150-0=150 pixels en hauteur. |
Obj_xxx.SetBorder(Valeur point de départ sur axe des X, Valeur point maximal sur axe des X, Valeur point de départ sur axe des Y, Valeur point maximal sur axe des Y) |
Numérique : Points limites des axes X et Y |
Exemple 1 : Obj_xxx.SetBorder(0, 5, -30, +30) donnera une échelle de 0 à 5 sur l'axe des X et une échelle de -30 à + 30 sur l'axe des Y.
Exemple 2 : Obj_xxx.SetBorder(Date.UTC(2007,0,2,0,0,0), Date.UTC(2007,0,7,0,0,0),-30,+30); donnera une échelle calendaire sur l'axe des X et une échelle de -30 à + 30 sur l'axe des Y. Nota : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
Obj_xxx.TitleFont="texte de style" |
Style du titre du graphe |
Obj_xxx.TitleFont="font-family:arial;font-weight:normal;font-size:15px;"
N'oubliez pas le point virgule (;) en fin de chaîne. |
Obj_xxx.Font="texte de style" |
Style des textes du graphe : labels et échelles des axes X et Y |
Obj_xxx.Font="font-family:arial;font-weight:normal;font-size:10px;"
N'oubliez pas le point virgule (;) en fin de chaîne. |
Obj_xxx.SetText("Label axe des X","Label axe des Y","Titre du graphe") |
Labels |
Obj_xxx.SetText("Jours","T°","Tendances") |
Obj_xxx.SetTitle("texte") |
TooltipText : Ce texte est affiché lorsque la souris survole les points de données. Un texte particulier peut être affecté à chaque point de donnée |
Obj_xxx.SetTitle("Températures diurne") |
Obj_xxx.SetXGridColor("Couleur grille","Couleur sous grille") |
Couleurs de la grille et de la sous grille suivant l'axe des X. Les paramètres sont les paramètres classiques de définition des couleurs. Si l'un ou les
deux champs sont vides ( "" ) la grille ou la sous grille n'apparaîtront pas.
Voir note 1 |
Exemples : Obj_xxx.SetXGridColor("white","red") ou Obj_xxx.SetXGridColor("#c0c0c0","#800000") |
Obj_xxx.SetYGridColor("Couleur grille","Couleur sous grille") |
Couleur de la grille et de la sous grille suivant l'axe des Y. Les paramètres sont les paramètres classiques de définition des couleurs. Si l'un ou les
deux champs sont vides ( "" ) la grille ou la sous grille n'apparaîtront pas. |
Exemples : Obj_xxx.SetYGridColor("white","red") ou Obj_xxx.SetYGridColor("#c0c0c0","#800000") |
Obj_xxx.XScalePosition = "Position axe des X" |
Position de l'axe des X :
"bottom" pour bas, "top" pour haut, "left"
pour gauche, "right" pour droite. et les combinaisons "bottom-left"
pour bas gauche, "bottom-right" pour bas droit, "top-left"
pour haut gauche, "top-right" pour haut bas. |
Obj_xxx.XScalePosition = "bottom" |
Obj_xxx.YScalePosition = "Position axe des X". |
Position de l'axe des Y : Même paramétrage que XScalePosition |
Obj_xxx.YScalePosition = "left" |
Obj_xxx.XGridDelta = x |
Échelle grille suivant l'axe des X (intervalles) : si 0 (défaut) l'intervalle est calculé automatiquement. Dans
tous les cas l'intervalle est calculé par rapport au paramétrage de Obj_xxx.SetBorder |
Exemple : Obj_xxx.SetBorder(-3,5, 0, 10) donne -3 comme valeur minimale de l'axe des X et 5 comme valeur maximale sur
ce même axe. Si Obj_xxx.XGridDelta =0 la grille est de 10 intervalles, si Obj_xxx.XGridDelta =2 on obtiendra une grille
toutes les 2 unités soit une grille tous les deux intervalles. |
Obj_xxx.YGridDelta = y |
Échelle grille suivant l'axe des Y (intervalles) :si 0 (défaut) l'intervalle est calculé automatiquement. Dans tous
les cas l'intervalle est calculé par rapport au paramétrage de Obj_xxx.SetBorder |
Exemple : Obj_xxx.SetBorder(0, 15, 0, 10) donne 0 comme origine de l'axe des Y et 10 comme valeur maximale sur
ce même axe. Si Obj_xxx.YGridDelta =0 la grille est de 10 intervalles, si Obj_.xxxYGridDelta =5 on obtiendra une grille
toutes les 5 unités soit une grille avec deux intervalles |
Obj_xxx.XSubGrids = x |
Intervalle de sous grille à l'intérieur d'un élément de grille suivant l'axe des X |
si 0 (défaut) l'intervalle est calculé automatiquement, si -1
distribution logarithmique de la sous grille, si différent de 0 ou
-1 paramétrage manuel du nombre de sous intervalles à l'intérieur
d'un élément de grille. |
Obj_xxx.YSubGrids = y |
Intervalle de sous grille à l'intérieur d'un élément de grille suivant l'axe des Y |
si 0 (défaut) l'intervalle est calculé automatiquement, si -1
distribution logarithmique de la sous grille, si différent de 0 ou
-1 paramétrage manuel du nombre de sous intervalles à l'intérieur
d'un élément de grille. |
Obj_xxx.XScale = x |
Présentation des unités de l'axe des X |
x = 0 : aucun nommage sur l'axe des X.
x = 1 : échelle numérique définie par Obj_xxx.SetBorder pour les bornes et Obj_xxx.XGridDelta pour les pas de grille.
x = 2 ou 3 ou 4 ou 5 échelle de dates personnalisées (à essayer individuellement pour voir celle qui vous correspond). Voir note 2
x = Chaîne de caractères : affichage du numérique de l'échelle + la chaîne de caractères.
Exemple :
Obj_xxx.XScale = "J"

x= fonction() : Obj_xxx.XScale = "function Nom". voir note 3 |
Obj_xxx.YScale = y |
Présentation des unités de l'axe des y |
Mêmes mécanismes que pour Obj_xxx.XScale ci dessus. |
Obj_xxx.Draw("Couleur de fond", "Couleur des textes", true/false (label sur axes),
"info texte lors du survol du graphe", "Action sur click" , "Action survol",
"Action hors survol") |
Dessin du corps du graphe : voir note 4 |
Obj_xxx.Draw("Images/FontGraph.jpg", "black", false, "Cliquez!", "DiagramClick()", "Diagramover()", "Diagramoff()") |
Note 1 :
si Obj_xxx.SetXGridColor et Obj_xxx.SetYGridColor possèdent des paramètres
identiques ils peuvent être rassemblés sous une même commande pour X et Y : Obj_xxx.SetGridColor .
Note 2 : échelle de dates personnalisées : exemple donné pour l'échelle des x
Les informations suivantes sont données à titre exemples pour montrer que l'échelle des dates s'adapte automatiquement en fonction des bornes définies sur l'axe.
Intervalle d'affichage > 15j et < 1 an : Obj_xxx.SetBorder(Date.UTC(2007,0,2,0,0,0),Date.UTC(2007,5,7,0,0,0),-1, +4) Note : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
valeur XScale (ou YScale) |
Commentaires |
Résultats |
Obj_xxx.XScale = 2 |
format de date N° Mois/N° Année |
 |
Obj_xxx.XScale = 3 |
format de date Nom Mois/N° Année |
 |
Obj_xxx.XScale = 4 ou Obj_xxx.XScale = 5 |
format de date Nom Mois |
 |
Intervalle d'affichage > 1jour et < 15 jours : Obj_xxx.SetBorder(Date.UTC(2007,0,2,0,0,0),Date.UTC(2007,0,10,0,0,0),-1, +4) Note : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
valeur XScale (ou YScale) |
Commentaires |
Résultats |
Obj_xxx.XScale = 2 |
format de date N° Jour.N° Mois. |
 |
Obj_xxx.XScale = 3 |
format de date Nom N° Mois/N° Jour |
 |
Obj_xxx.XScale = 4 |
format de date Nom Jour |
 |
Obj_xxx.XScale = 5 |
format de date Nom Jour N° Jour |
 |
Intervalle d'affichage > 6 heures et < 1 jour : Obj_xxx.SetBorder(Date.UTC(2007,0,2,2,0,0),Date.UTC(2007,0,2,10,0,0),-1, +4) Note : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
valeur XScale (ou YScale) |
Commentaires |
Résultats |
Obj_xxx.XScale = 2 |
format de date Heure:Minute |
 |
Obj_xxx.XScale = 3 |
format de date N° Heure am (pm) |
 |
Obj_xxx.XScale = 4 ou Obj_xxx.XScale = 5 |
format de date Heure:Minute am(pm) |
 |
Intervalle d'affichage > 1 minute et < 6 heures : Obj_xxx.SetBorder(Date.UTC(2007,0,2,10,50,0),Date.UTC(2007,0,2,14,50,0),-1, +4) Note : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
valeur XScale (ou YScale) |
Commentaires |
Résultats |
Obj_xxx.XScale = 2 |
format de date N° Heure:N° Minute (Pas de 30s) |
 |
Obj_xxx.XScale = 3 |
format de date N° Heure:N° Minute am(pm) (Pas de 30s) |
 |
Obj_xxx.XScale = 4 ou Obj_xxx.XScale = 5 |
format de date N° Heure.N° Minute am(pm) (Pas de 30s) |
 |
Autre exemple : Obj_xxx.SetBorder(Date.UTC(2007,0,2,10,0,0),Date.UTC(2007,0,2,10,50,0),-1, +4) Note : Date.UTC(année complète,N° mois -1,N° jour, heures, minutes, secondes).
|
valeur XScale (ou YScale) |
Commentaires |
Résultats |
Obj_xxx.XScale = 2 |
format de date N° Heure:N° Minute (Pas de 5s) |
 |
Note 3 : utilisation de fonctions avec .XScale
Obj_xxx.XScale="function nomgraphex"; .
Obj_xxx.SetBorder(0,6,0,
10) est initialisé à 0-6 car on veut afficher sur l'axe des X les 7
jours de la semaine. La fonction nomgraphex est déclarée de la façon suivante :
var MonTableau = new Array("Lundi",
"Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche");
function nomgraphex(vv){
return "<b><i><font size ='2' color='red'>" + MonTableau[vv] +
"</font></i></b>";
}
on obtient le résultat personnalisé suivant :

Remarques : pas de parenthèses après nomgraphex dans Obj_.XScale="function
nomgraphex". Dans la déclaration de la fonction il faut
obligatoirement mettre un paramètre entre les parenthèses (ici vv)
qui sera utilisé comme index dans la fonction. La fonction est
automatiquement appelée par le mécanisme de base (dans diagram.js)
qui passe l'indice de chaque abscisse de l'axe et récupère le texte
voulu.
Note 4 :
Le paramètre de la couleur de fond peut être une couleur ou un fichier image.
Le 3eme paramètre positionné à true affichera le label sur l'axe, positionné à false aucune info ne sera affichée :
les labels sont ceux définis précédemment par Obj_xxx.SetText("Label axe des X","Label axe des Y","Titre du graphe");
DiagramClick(), Diagramover(), Diagramoff() sont des noms d'actions faisant appel à des fonctions que vous
pouvez développer:
- DiagramClick() engage une action lorsque l'on clique sur le graphe.
- Diagramover() engage une action lors du survol du graphe par la souris.
- Diagramoff() engage une action lorsque la souris ne survole plus le graphe.
- Si on ne veut pas utiliser une de ces actions il suffit d'initialiser le paramètre à "void(0)".
Exemple : Obj_xxx.Draw("Images/FontGraph.jpg","black",false,"Cliquez!","void(0)","void(0)","void(0)");
Exemple complet
Génération des objets de données
Généralités
Dans cette partie on va donner tout d'abord une liste de méthodes
permettant de positionner les données aux bons endroits sur le graphe,
et ensuite les méthodes de génération des données elles mêmes sur le
graphe.
Méthodes de positionnement des données
Génération des données
Données pour dessiner des donnes de type box
var Bx = new Box(L1x, L1y, L2x, L2y,
"Col1"," Texte", "Col2", "lgb"," Col3" [,
"Tooltip", "OnClickAction", "OnMouseoverAction", "OnMouseoutAction"])
// (entre crochets les paramètres facultatifs) |
Paramètres |
Commentaires |
Position |
L1x |
Numérique : Limite gauche de la boite sur l'axe
des x : |
L1y |
Numérique : Limite haute de la boite sur
l'axe des y : |
L2x |
Numérique : Limite droite de la boite sur l'axe
des x |
L2y |
Limite basse de la boite sur
l'axe des y : |
Col1 |
Couleur de la boite |
Texte |
- url absolue ou relative d'un fichier image pour représenter la
boite par une image.
- texte apparaissant en haut de la boite .
- Si pas d'url ou de texte le champ doit tout de même être initialisé à vide "".
|
Col2 |
Couleur du texte du champ précédent
si ce dernier est du texte. |
lgb |
Largeur bordure de la boite |
Col3 |
Couleur bordure de la boite |
Tooltip |
Paramètre facultatif : texte affiché
lors du survol de la boite . |
OnClickAction |
Paramètre facultatif : fonction
effectuée lors d'un click sur la boite . |
OnMouseoverAction |
Paramètre facultatif : fonction
effectuée lors du survol de la boite par le curseur. |
OnMouseoutAction |
Paramètre facultatif: fonction
effectuée hors survol de la boite par le curseur. |
 |
|
Données pour dessiner des lignes
var L = new Line(L1x, L1y, L2x, L2y,
"Col1" [, "Size", "Tooltip", "OnClickAction" ,
"OnMouseoverAction",
"OnMouseoutAction"]) |
Paramètres |
Commentaires |
Position |
L1x |
Numérique : Coordonnée x du point de départ |
L1y |
Numérique : Coordonnée x du point de départ |
L2x |
Numérique : Coordonnée x du point d'arrivée |
L2y |
Numérique : Coordonnée x du point d'arrivée |
Col1 |
Couleur de la ligne |
Size |
Paramètre facultatif :Épaisseur de la ligne. Par défaut
valeur 1 |
Tooltip |
Paramètre facultatif : texte affiché
lors du survol de la ligne. |
OnClickAction |
Paramètre facultatif : fonction
effectuée lors d'un click sur la ligne. |
OnMouseoverAction |
Paramètre facultatif : fonction
effectuée lors du survol de la ligne par le curseur. |
OnMouseoutAction |
Paramètre facultatif : fonction
effectuée hors survol de la ligne par le curseur. |
 |
|
Données pour les graphiques de type pie (camembert)
var P = new
Pie(XCentre, YCentre, Offset, Radius, Angle0, Angle1,
"Couleur","
Tooltip", "OnClickAction", "OnMouseoverAction", "OnMouseoutAction")
|
Paramètres |
Commentaires |
Position |
XCentre |
Numérique : Coordonnée suivant l'axe des x du centre du
graphique. Références prises à partir du bord gauche du
conteneur parent. |
YCentre |
Numérique : Coordonnée suivant l'axe des y du centre du
graphique. Références prises à partir du bord haut du conteneur
parent. |
Offset |
Numérique : Décalage de la tranche. |
Radius |
Rayon de la tranche. |
Angle0 |
Début de la tranche en ° |
Angle1 |
Fin de la tranche en ° |
Couleur |
Couleur de remplissage de la tranche. |
Tooltip |
Texte affiché lors du survol de la tranche. |
OnClickAction |
Fonction effectuée lors d'un click sur la tranche. |
OnMouseoverAction |
Fonction effectuée lors du survol de la tranche par le
curseur. |
OnMouseoutAction |
Fonction effectuée hors survol de la tranche par le curseur. |
 |
|
Données pour les graphiques de type pixels
var Px = new Pixel(X,Y, Couleur) |
Paramètres |
Commentaires |
Position |
X |
Position du pixel suivant l'axe des x. |
Y |
Position du pixel suivant l'axe des y. |
Couleur |
Couleur donnée au pixel. |
 |
|
Données pour les graphiques de type barres
var Br = new Bar(L1x, L1y, L2x, L2y,
"Col1", " Texte", "Col2" [, "Tooltip", "OnClickAction",
"OnMouseoverAction", "OnMouseoutAction"])
// (entre crochets les paramètres facultatifs) |
Paramètres |
Commentaires |
Position |
L1x |
Début de la barre : coordonnée x. |
L1y |
Début de la barre : coordonnée y. |
L2x |
Fin de la barre : coordonnée x. |
L2y |
Fin de la barre : coordonnée y. |
Col1 |
Couleur de la barre. |
Texte |
Texte apparaissant en haut de la barre |
Col2 |
Couleur du texte. |
Tooltip |
Texte affiché lors du survol de la barre. |
OnClickAction |
Fonction effectuée lors d'un click sur la barre. |
OnMouseoverAction |
Fonction effectuée lors du survol de la barre par le
curseur. |
OnMouseoutAction |
Fonction effectuée hors survol de la barre par le curseur. |
 |
|
Autres applications des barres
Variable globale
_BFont est une variable globale de style, pour les textes des graphiques à barres et diverses boites sauf les axes X et Y de tous les graphiques de la page html.
Par défaut _BFont="font-family:arial;font-weight:normal;font-size:8pt;line-height:13pt;";
Méthodes pour modifier dynamiquement les données du graphique
Méthodes
xxx représente la référence de la donnée à modifier.
Méthodes |
Commentaires |
xxx.SetColor("Couleur"); |
Modifie la couleur de la barre,
ligne, pixel, pie ou box. En ce qui concerne le graphique de
type pixels, chaque point doit être modifié. |
xxx.SetVisibility(true/false); |
Visibilité de la donnée : .SetVisibility(true)
la donnée est visible. .SetVisibility(false) la donnée est
invisible. |
xxx.SetText("texte"); |
Texte de la barre. |
xxx.SetTitle("Mon titre"); |
Info au survol de la donnée. |
xxx.MoveTo(Position x, Position y); |
Déplacement de la donnée de sa position initiale vers une
nouvelle position définie par Position x et Position y.
Position x et Position y lorsqu'ils existent sont des valeurs numériques.
Si une des valeurs ne bouge pas par rapport à l'original on peut
la remplacer par "". Exemples :
Object.MoveTo("", D.ScreenY(2)) va déplacer l'objet uniquement suivant l'axe des x.
Object.MoveTo(D.ScreenY(2),"") va déplacer l'objet uniquement suivant l'axe des y. |
xxx.ResizeTo(Position gauche, Position haute, Largeur, hauteur); |
Dimensionnement. |
xxx.Delete(); |
Effacement de l'objet de la donnée |
Exemples d'application des méthodes
Informations sur la livraison
Les fichiers Demo_Custom_Barres.js, Demo_Custom_Lignes.js, Demo_Custom_Pixel.js, Demo_Custom_Pie.js et Demo_Custom_Box.js qui sont livrés avec le fichiers .zip sont des
fichiers adaptés aux divers graphiques disponibles avec l'objet diagram.
On travaille avec les variables Obj_ et Form_ passées en
paramètres lors de l'appel de la fonction à partir de la page HTML ou
l'objet a été initialement définie :
var _Obj_Type graphique = new Diagram();
et la forme var _Form_Type graphique
= new Array();
Application au projet de site web
Dans le tableau des prix insérer un petit graphique de type box afin
de refléter l'évolution des prix sur les 3 dernières années.
Retrouvez la solution
|