Graphiques sur une page avec liste déroulante

Ce forum est dédié aux discussions qui concernent les graphiques réalisés avec la librairie Highcharts, Une question, un bug ?

Modérateurs : jturlier, Météo Villarzel

Alex54
Messages : 12
Enregistré le : 17 avr. 2014, 15:32
Localisation : Heillecourt en Meurthe-et-Moselle (54180)
Contact :

Graphiques sur une page avec liste déroulante

Message par Alex54 » 17 avr. 2014, 20:13

Bonjour,

Je développe en ce moment des graphiques dynamiques avec highcharts en local pour remplacer ceux de graphweather.

J'ai 7 pages pour les graphiques (température, humidité, point de rosée, pression, vent, pluie, tout les paramètres), sur la page est présent une liste déroulante qui permet de choisir l'intervalle de temps définie sur 24h, 7j, 30j et 365j, puis en dessous le graphique inséré dans une DIV qui est display en none ou block grâce au sélécteur.

J'inclus donc tous les fichiers highcharts pour 24h, 7j,30j et 365j avec un include, chaque fichier highcharts n'a juste en différence que le time, subtitle, title etc..., le problème c'est que quand j'inclus tout les fichiers php highcharts l'uns après l'autres, le graphique généré sera toujours celui qui est inclus en dernier peut importe la liste déroulante, je pense que le seul pris en compte pour faire le graphique est le dernier inclus.

y'a t il un moyen de prendre un seul fichier highcharts et mettre des variables pour subtitle title time etc... ? style faire juste un include comme cela :

Code : Tout sélectionner

<?php
$time='86400'; 
$title='Température'; 
$subtitle='Graphique sur 24H';
include('graph_dyn/temperature.php'); 
?>
Ou quelle est l'erreur dans mon organisation ?

CODE d'une page d'un graphique (ici température) :

Code : Tout sélectionner


<?php
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('highcharts');
?>

<script type="text/javascript" src="highcharts3/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="highcharts3/js/overlib.js"></script>
<script type="text/javascript" src="highcharts3/js/overlib_fade.js"></script>
<script type="text/javascript" src="highcharts3/js/highcharts.js"></script>
<script type="text/javascript" src="highcharts3/js/themes/grid.js"></script>
<script type="text/javascript" src="highcharts3/js/modules/exporting.js"></script>

<!-- SCRIPT DE LA LISTE DEROULANTE POUR CHOISIR LA DIV A AFFICHER OU NON !-->

<script type="text/javascript">
function change(period)
    {
        if (period == '0')
        {
            document.getElementById('ctn_temp_24').style.display='block';
        }else{
            document.getElementById('ctn_temp_24').style.display='none';
        }

        if (period == '1')
        {
            document.getElementById('ctn_temp_7').style.display='block';
        }else{
            document.getElementById('ctn_temp_7').style.display='none';
        }

        if (period == '2')
        {
            document.getElementById('ctn_temp_30').style.display='block';
        }else{
            document.getElementById('ctn_temp_30').style.display='none';
        }

        if (period == '3')
        {
            document.getElementById('ctn_temp_365').style.display='block';
        }else{
            document.getElementById('ctn_temp_365').style.display='none';
        }

    }
</script>

<!-- FIN DU SCRIPT !-->

<center>
    <select name="period" id="period" onChange="change(this.value)">
        <option value="0" selected>sur 24H</option>
        <option value="1">sur 7 jours</option>
        <option value="2">sur 30 jours</option>
        <option value="3">sur 365 jours</option>
    </select>
</center>

<?php include('graph_dyn/temperature_24h.php'); ?>
<?php include('graph_dyn/temperature_7j.php'); ?>
<?php include('graph_dyn/temperature_30j.php'); ?>
<?php include('graph_dyn/temperature_365j.php'); ?>

</head>

<body>


<div id="ctn_temp_24"  style="width: 900px; height: 500px; margin: 0 auto"></div>
<div id="ctn_temp_7" style="display:none; width: 900px; height: 500px; margin: 0 auto"></div>
<div id="ctn_temp_30" style="display:none; width: 900px; height: 500px; margin: 0 auto"></div>
<div id="ctn_temp_365" style="display:none; width: 900px; height: 500px; margin: 0 auto"></div>

</div>
CODE graph_dyn/temperature_24h.php (fichier Highcharts) :

Code : Tout sélectionner

<!--                                       Début Script graphique                                                      !-->
<?php

$sql="select max(tstamp) from data";
$query=mysql_query($sql);
$list=mysql_fetch_array($query);

$stop=$list[0];
$start=$stop-(86400*1); // 86400 = 24h
$sql = "SELECT tstamp, outdoortemperature FROM data where tstamp >= '$start' and tstamp <= '$stop' ORDER BY 1";

                  $query=mysql_query($sql);
                  $i=0;
                  while ($list = mysql_fetch_assoc($query)) {
                  if (date("I",time())==0) {
                   $time[$i]=($list['tstamp']+3600)*1000;
                   }
                   else {
                   $time[$i]=($list['tstamp']+7200)*1000;
                    }

$outdoortemperature[$i]=$list['outdoortemperature']*1;
$i++;
}
 ?>
<script type="text/javascript">
eval(<?php echo "'var time = ".json_encode($time)."'" ?>);
eval(<?php echo "'var outdoortemperature = ".json_encode($outdoortemperature)."'" ?>);
</script>


<script type="text/javascript">

function comArr(unitsArray) { var outarr = [];
for (var i = 0; i < time.length; i++) { outarr[i] = [time[i], unitsArray[i]];
}
return outarr;
}

$(function () {
var chart;
$(document).ready(function() {
var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
Highcharts.setOptions({
lang: {

months: ["Janvier "," Février ","Mars "," Avril "," Mai "," Juin "," Juillet "," Août "," Septembre ",
" Octobre "," Novembre "," Décembre"],
weekdays: ["Dim "," Lun "," Mar "," Mer "," Jeu "," Ven "," Sam"],
shortMonths: ['Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil','Août', 'Sept', 'Oct', 'Nov', 'Déc'],
decimalPoint: ',',
resetZoom: 'Réinitialiser zoom',
resetZoomTitle: 'Réinitialiser zoom à 1:1',
downloadPNG: "Télécharger au format PNG image",
downloadJPEG: "Télécharger au format JPEG image",
downloadPDF: "Télécharger au format PDF document",
downloadSVG: "Télécharger au format SVG vector image",
exportButtonTitle: "Exporter image ou document",
printChart: "Imprimer le graphique",
loading: "Chargement..."
 }

});

chart = new Highcharts.Chart({
chart: {
renderTo: 'ctn_temp_24',
zoomType: 'x',
type: 'spline',
marginRight: 10,
marginBottom: 60,
plotBorderColor: '#346691',
plotBorderWidth: 1,
},

title: {
text: 'Température',
x: -20 //center
},

subtitle: {
text: 'Graphique des derniers 24H',
x: -20
},

xAxis: {
type: 'datetime',
startOnTick: false,
},

yAxis: {
title: {
text: 'Température (°C)'
},

plotLines: [{
value: 0,
width: 1,
color: '#FF0000'
}]
 },

tooltip: {
crosshairs:[true],
borderColor: '#4b85b7',
shared: true,
backgroundColor: '#edf1c8',
formatter: function() {
var s = '<b>'+ Highcharts.dateFormat('%e %B à %H:%M',
this.x) +'</b>';
$.each(this.points, function(i, point) {
var unit = {
'Température': '°C'

 }[this.point.series.name];
s = s + '<br>' + '<span style="color:'+ point.series.color +'">' + point.series.name + '</span> : '
+Highcharts.numberFormat(point.y,1,","," ")+ unit;
});
return s;
 },
 },

plotOptions: {
series: {
marker: {
enabled: false
 }
 }
},

series: [
{
name: 'Température',
zIndex: 1,
color: '#FF0000',
data: comArr(outdoortemperature)
 }
]
});
});
});

</script>

<!--                                       Fin Script graphique                                                      !-->
Merci et n'hésitez pas si vous avez besoin de plus de détails
Cordialement
Station:
VP2 - console (datalogger RS232 + Raspberry Pi 3 pour envoi réseau)

VP2SQL + WeatherLink 6.0.5 + GraphWeather 3.0.15

Serveur:
DELL R210 - Xeon - 16Go RAM - SSD

Site:
http://www.meteo-heillecourt.fr

Avatar du membre
helmain
Administrateur du site
Messages : 54
Enregistré le : 09 févr. 2014, 12:44
Localisation : FRANCE - Lagny-sur-Marne (77)
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par helmain » 17 avr. 2014, 21:09

Bonsoir Alexis,
Qu'est ce qu'il y a dans le source de ta nouvelle page affichant les 6 graphiques, enfin celle qui correspond à l'actuelle "graphiques.php" ?
Quand tu dis :
J'inclus donc tous les fichiers highcharts pour 24h, 7j,30j et 365j avec un include, chaque fichier highcharts n'a juste en différence que le time, subtitle, title etc..., le problème c'est que quand j'inclus tout les fichiers php highcharts l'uns après l'autres, le graphique généré sera toujours celui qui est inclus en dernier peut importe la liste déroulante, je pense que le seul pris en compte pour faire le graphique est le dernier inclus.
Le dernier inclus, c'est à dire que si tu as conservé le même ordre qu'avec les graphiques GW, tu n'as que le graphique du vent qui s'affiche, c'est bien celà.
Ou bien c'est le dernier inclus de tes différents "include" soit toujours le graph de 365j qui est généré pour chacun de tes 6 graphiques ??

Enfin je voulais juste te dire un truc, le forum est destiné à ceux qui ont des soucis pour élaborer un graphique HighCharts/HighStock.
Or tu n'as pas ce problème à première vue.
Tu as plutôt l'air d'avoir un souci dans l'écriture du code javascript/php/html gérant l'affichage de tes différents graphiques sur ta page, ce qui n'est pas tout à fait la même chose il me semble !
Pris un par un tes graphiques s'affichent bien, hein ?
Station Vantage Pro2 + Soil/Leaf + Anémomètre déporté - Weatherlink 6.0.3 - Weather Display 10.37S build 84 - Cumulus 1.9.4 build 1099 - GraphWeather 3.0.28 - Windows 10/64 - VP2SQL + WDTU 1.2 pour Envoy8x - Hébergé par o2switch (MySql/PgSql)

Image

Alex54
Messages : 12
Enregistré le : 17 avr. 2014, 15:32
Localisation : Heillecourt en Meurthe-et-Moselle (54180)
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par Alex54 » 17 avr. 2014, 21:20

Bonsoir,

Oui désolé je viens de me rendre compte que j'aurais du poster dans PHP, si y a besoin de déplacer pas de problème.

Concernant les pages, j'ai en fait une page par sonde (temperature, humidité, pluie etc...), j'ai mis une page en exemple dans le post précédent (CODE d'une page d'un graphique (ici température) ), ma page graphique ne sera pas du tout la même je n'aurais plus 6 graphiques sur une page mais chaque graphique (x4 pour 24h, 7j, 30j et 365j) sur sa page (temperature.php, humidite.php etc...)

Le problème c'est que je n'arrive pas à mettre plusieurs graphiques sur une même page et pris un part un les graphique fonctionnent bien, en fait pour simplifier je veux faire de la même façon que Météo Jarny avec une liste déroulante (http://www.meteo-jarny.com/D-temperature-3mois.php) , c'est bien un problème niveau php, js

Désole si je ne suis pas très clair^^
Station:
VP2 - console (datalogger RS232 + Raspberry Pi 3 pour envoi réseau)

VP2SQL + WeatherLink 6.0.5 + GraphWeather 3.0.15

Serveur:
DELL R210 - Xeon - 16Go RAM - SSD

Site:
http://www.meteo-heillecourt.fr

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par JP54 » 18 avr. 2014, 08:36

Bonjour Alexis,
je vais t'expliquer comment j'ai fais pour faire mon menu déroulant.

j'ai créé un dossier "Graphiques-dynamique" ou j'ai mis tous mes graphiques
http://www.meteo-jarny.com/graphiques-d ... re-48h.php

A la racine de mon site j'ai créé des pages ou j'insère mes graphique avec un" iframe"
http://www.meteo-jarny.com/D-temperature-48h.php

J'ai créé une page avec mon menu déroulant pour avoir tous mes graphiques et quelques infos
http://www.meteo-jarny.com/menu-graphique-dynamique.php

Puis mon menu déroulant est inséré dans toutes les pages que contient mon menu déroulant à l'aide d'un <?php include('menu-graphique-dynamique.php'); ?>

Résumé, dans ma page
http://www.meteo-jarny.com/D-temperature-48h.php
le graphique est inséré par un 'iframe" et le menu déroulant avec un php include"
et c'est la même chose pour toutes les pages qui sont dans mon menu déroulant

Pascal
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Avatar du membre
helmain
Administrateur du site
Messages : 54
Enregistré le : 09 févr. 2014, 12:44
Localisation : FRANCE - Lagny-sur-Marne (77)
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par helmain » 18 avr. 2014, 09:18

Pascal, je voudrai ajouter quelque chose d'important !
La page d'Alexis comporte 6 graphiques pour lesquels l'internaute peut choisir entre 4 périodes d'affichage allant de 24h à 365 jours.
Toi, Pascal, tu as également une palette de périodes, mais tu n'affiches qu'un seul graphique à la fois.
Alexis n'a pas encore réalisé la différence entre envoyer sur le poste client 6 images déjà constituées, donc un truc relativement léger et envoyer sur le même poste client les données correspondant à 365 jours de relevés multipliés par 6 soit des milliers de relevés que le poste client va devoir reprendre pour constituer les 6 graphiques.
Parce qu'avec HighCharts, c'est le poste client qui crée le graphique à partir des données envoyées par le serveur.
Pour te rendre compte Alexis, comme tu parles de meteo-jarny, retourne sur cette page http://www.meteo-jarny.com/D-pluie-3mois.php, page qui affiche un graph de la pluviométrie sur trois mois,
Maintenant, regarde l'ampleur du fichier source, et là tu n'as qu'un seul graphique d'affiché, il ne fait que 3 Mo soit 18 Mo pour 6 graphiques sur une période de 3mois, soit pour une période d'un an 72 Mo !! :o
Si tu tombes sur un poste client un peu vieillot, tu auras le temps de tricoter deux manches à ton pull avant de voir tes graphiques à l'écran, si le poste y a survécu. :mrgreen:
Tu ferais mieux de changer ton fusil d'épaule à mon humble avis !
Station Vantage Pro2 + Soil/Leaf + Anémomètre déporté - Weatherlink 6.0.3 - Weather Display 10.37S build 84 - Cumulus 1.9.4 build 1099 - GraphWeather 3.0.28 - Windows 10/64 - VP2SQL + WDTU 1.2 pour Envoy8x - Hébergé par o2switch (MySql/PgSql)

Image

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par JP54 » 18 avr. 2014, 09:56

En effet, j'avais pas très bien compris ce qu'Alexis voulait faire.
C'est sur que ça va mettre un temps fou pour charger, déjà ma page sur 3 mois ça met déjà quelques secondes.
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Alex54
Messages : 12
Enregistré le : 17 avr. 2014, 15:32
Localisation : Heillecourt en Meurthe-et-Moselle (54180)
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par Alex54 » 18 avr. 2014, 12:00

Bonjour,

Je ne veux pas afficher plusieurs graphiques en même temps mais un seul (24h ou 7j ou 30j ou 365j) comme Pascal.
Effectivement pour le graphique sur 365 jours cela risque de prendre un certain temps auquel je n'avais pas pensé, je veux egalement faire comme ce que Pascal a fait mais juste pour 24h, 7j, 30j et 365j, à une différence c'est que les sondes auront leurs pages à elle et non toutes les sondes sur une page avec un sélecteur :)
Station:
VP2 - console (datalogger RS232 + Raspberry Pi 3 pour envoi réseau)

VP2SQL + WeatherLink 6.0.5 + GraphWeather 3.0.15

Serveur:
DELL R210 - Xeon - 16Go RAM - SSD

Site:
http://www.meteo-heillecourt.fr

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par JP54 » 18 avr. 2014, 12:55

Tu veux le même graphique que ça
http://www.meteo-jarny.com/D-temperature-3mois.php
mais en supprimant 1heure, 12heures et en mettant 24h, 7j, 30j, 365j
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Alex54
Messages : 12
Enregistré le : 17 avr. 2014, 15:32
Localisation : Heillecourt en Meurthe-et-Moselle (54180)
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par Alex54 » 18 avr. 2014, 13:14

Oui comme celui la, mais je bloque sur le fichier highchart, je n'arrive pas à en insérer plusieurs sur une page, ils se mélangent et au final y a toujours la même courbe qui s'affiche
Station:
VP2 - console (datalogger RS232 + Raspberry Pi 3 pour envoi réseau)

VP2SQL + WeatherLink 6.0.5 + GraphWeather 3.0.15

Serveur:
DELL R210 - Xeon - 16Go RAM - SSD

Site:
http://www.meteo-heillecourt.fr

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Graphiques sur une page avec liste déroulante

Message par Météo Villarzel » 18 avr. 2014, 13:19

Salut Alex,

Le graphique que Pascal te montre n'est pas fait avec Highcharts, mais avec Highstock.
C'est le "Range Selector" qui permet de faire un zoom sur une période, mais le graphique reste le même.
Regarde ici
http://www.boock.ch/meteo/tuto_mysql_hi ... rts_09.php

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

Répondre