Bonjour,
Tout d'abord, j'espère que je poste ce message au bon endroit, et si ce n'est pas le cas, m'en excuse par avance. Étant donné que ce sujet prend en compte plusieurs choses, je ne savais pas trop...
Mon problème est le suivant*: Entrer des données dans un graphique JpGraph. Mais ce serait trop facile s'il n'y avait que cela…
Ma table « compteurs » ressemble à ceci :
Chaque jour, si l'imprimante est allumée, un nouveau compteur s'ajoute. Il peut être équivalent à celui de la veille s'il n'y a pas eu d'impression, ou être différent s'il y en a eu.
Mon objectif est de créer un graphique par imprimante montrant la différence entre chaque compteur, pour voir si les imprimantes sont beaucoup utilisées ou pas.
En gros si mon compteur du 11/05/14 est à 12000, et celui du 12/05/14 à 12096, il faudrait que j'arrive à calculer cette différence pour que mon histogramme m'affiche une barre équivalente à 96, Puis, si le 13/05/14, le compteur est toujours à 12096, il faudrait que l'histogramme affiche une barre équivalente à 0, puis si le 14/05/14, le compteur est 12150, la barre affichera 54, etc.
De plus, mon histogramme doit, à chaque fois, afficher les 30 dernières dates.
Pour l'instant, j'ai réussi à écrire une requête me permettant de récupérer les 30 dernières dates :
Cette requête a été intégrée dans ce code de JpGraph :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT compteur AS COMPT, date_releve AS JOUR FROM compteurs WHERE id_imprimante = 4 ORDER BY date_releve DESC LIMIT 0,30;
J'ai récupéré ce code dans ce tutoriel, et l'ai adapté à mon cas. Le problème est qu'il m'affiche un graphique avec des barres à la même hauteur entre 10000 et 12000 (à moins que l'écart ne soit trop léger pour que la différence puisse se voir).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 <?php include ("../jpgraph/src/jpgraph.php"); include ("../jpgraph/src/jpgraph_bar.php"); define('MYSQL_HOST', 'localhost'); define('MYSQL_USER', 'root'); define('MYSQL_PASS', 'a'); define('MYSQL_DATABASE', 'imprimantes_test'); $tableauDate = array(); $tableauCompteurs = array(); // ************************************************ // Extraction des données dans la base de données * // ************************************************ $sql = <<<EOF SELECT compteur AS COMPT, date_releve AS JOUR FROM compteurs WHERE id_imprimante = 4 ORDER BY date_releve ASC LIMIT 0,30 EOF; $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Problème de connexion mysql'); @mysql_select_db(MYSQL_DATABASE) or die('Problème de sélection de la base'); $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Problème de requête'); while ($row = mysql_fetch_array($mysqlQuery, MYSQL_ASSOC)) { $tableauDate[] = ' ' . $row['JOUR']; $tableauCompteurs[] = $row['COMPT']; } // *********************** // Création du graphique * // *********************** // Construction du conteneur // Spécification largeur et hauteur $graph = new Graph(1000,250); // Réprésentation linéaire $graph->SetScale("textlin"); // Ajouter une ombre au conteneur $graph->SetShadow(); // Fixer les marges $graph->img->SetMargin(40,30,25,40); // Gauche, droit, haut, bas // Création du graphique histogramme $bplot = new BarPlot($tableauCompteurs); // Spécification des couleurs des barres $bplot->SetFillColor(array('red', 'green', 'blue')); // Une ombre pour chaque barre $bplot->SetShadow(); // Afficher les valeurs pour chaque barre $bplot->value->Show(); // Fixer l'aspect de la police $bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); // Modifier le rendu de chaque valeur // $bplot->value->SetFormat('%d ventes'); // Ajouter les barres au conteneur $graph->Add($bplot); // Le titre $graph->title->Set("Graphique 'HISTOGRAMME' : Compteurs"); $graph->title->SetFont(FF_FONT1,FS_BOLD); // Titre pour l'axe horizontal(axe x) et vertical (axe y) $graph->xaxis->title->Set("Date"); $graph->yaxis->title->Set("Impressions par jour"); $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); // Légende pour l'axe horizontal $graph->xaxis->SetTickLabels($tableauDate); // Afficher le graphique $graph->Stroke(); ?>
Voici l'image du rendu :
Donc il est évident que mon axe des ordonnées prend en compte les compteurs à proprement parler (en même temps, je lui dis de les prendre donc c'est logique). Moi je voudrais qu'il affiche la différence entre chaque jour !
Encore un dernier point : sur le code que j'ai donné le graphique est beaucoup trop petit pour pouvoir lire les dates complètes. Du coup, il faut que je change la taille à au moins 3000 ! Mais ça ne rentrera jamais sur mon site à la fin… Y'a-t-il un moyen de faire une sorte de déroulement sur le côté ? Je ne sais pas si je me fais comprendre…
Et pour la date, peut-on l'afficher en format dd/mm plutôt que yyyy-mm-dd ?
Comment faire ? Je suis totalement perdue…
Merci par avance !
Anju
Edit :
J'ajoute qu'au final du projet, je dois avoir une page Web avec la liste de toutes mes imprimantes, et quand je clique sur une imprimante, le graphique qui correspond apparaît.
Est-ce vraiment possible de faire tout ça en ne faisant qu'UNE seule page ?
Partager