Moyenne journalière

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

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

Moyenne journalière

Message par JP54 » 11 mai 2019, 16:50

Bonjour,
Je suis en train de créé un graphique de la température moyenne journalière du mois en cours.
Pour ce faire j'ai repris la partie PHP de ce graphique https://www.meteo-jarny.com/DY-graphiqu ... e-temp.php que Pascal m'a faite suite à mon problème de toolotip et que j'ai modifié

J'ai modifié la variable $anencours= date("Y") par $moisencours= date("m") et les deux variable $xlabel_m et $tabmois

Code : Tout sélectionner

<?php
// appel du script de connexion
require("mysqli_connect.php");                                         
// Récupération des données 
$moisencours= date("m");
$sql = "SELECT Moy_T FROM noaa_jour WHERE Mois=$moisencours;";  
$query = mysqli_query($conn,$sql);                   
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
	$dTemp[$i]=round($list['Moy_T']*1,1);// on arrondi à 1 chiffre après la virgule
	$i++;
} 	
mysqli_free_result($query);
mysqli_close($conn);
$xlabel_m = array("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");
$tabmois = array("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31");

?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
<script
	src="https://code.jquery.com/jquery-3.3.1.min.js"
	integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
	crossorigin="anonymous">
</script>
<script src="https://code.highcharts.com/highcharts.js" type="text/javascript"></script>
<script src="https://code.highcharts.com/modules/exporting.js" type="text/javascript"></script>
<script src="https://code.highcharts.com/js/themes/gray.js" type="text/javascript"></script>
<script type="text/javascript" src="jquery/overlib.js"></script>
<script type="text/javascript" src="jquery/overlib_fade.js"></script>    

<script type="text/javascript"> 
eval(<?php echo  "'var dLabelm =  ".json_encode($xlabel_m)."'" ?>);
eval(<?php echo  "'var dTime =  ".json_encode($tabmois)."'" ?>);
eval(<?php echo  "'var dTemp =  ".json_encode($dTemp)."'" ?>);
eval(<?php echo  "'var moisencours =  ".json_encode($moisencours)."'" ?>);
</script>
         <script type="text/javascript"> 
          function comArr(unitsArray) {
            var outarr = [];
            for (var i = 0; i < dTime.length; i++) {
             outarr[i] = [dTime[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: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
            shortMonths: ['Jan.', 'Fév.', 'Mars', 'Avr.', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc'],
            exportButtonTitle: "Exporter",
            printButtonTitle: "Imprimer",
            rangeSelectorFrom: "Du:",
            rangeSelectorTo: "A:",
            rangeSelectorZoom: "Période:",
            resetZoom: 'RAZ Zoom',
            resetZoomTitle: '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",
			printChart: "Imprimer le graphique",
            exportButtonTitle: "Exporter image ou document",
            printButtonTitle: "Imprimer le graphique",
            loading: "Chargement...",
            thousandsSep: ""
            }
          });
            chart = new Highcharts.Chart({
                chart: {
                renderTo: 'container',
                zoomType: 'x',
                type: 'column',
				marginRight: 10,
                marginBottom: 60,
				plotBorderColor: '#346691',
				plotBorderWidth: 1,
                },
            title: {
                text: 'Température moyenne année '+moisencours,
			    style: {
                color: '#BDBDBD',
                fontWeight: 'bold'}
                },
				
            subtitle: {
                text: 'Source: Météo Jarny',
                x: -20
                },

            credits: {
                text: '© Météo Jarny',
                href: ''
                },

            xAxis: {
                categories: dLabelm,
                labels: {
                    rotation: 0,
                    align: 'center',
                    style: {
                        fontSize: '6px',
                        fontFamily: 'Verdana, sans-serif'
                        }
                    }
                },
				
                yAxis: [{
                    title: {
                        text: '',
                        },
                    labels: {
                        formatter: function() {
                        return this.value +' °C';
                        },
                        style: {
                            color: '#BDBDBD'
                        }
                    },           
                }
            ],

            legend: {
                enabled: false,
                x: 0
                },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.y}</b><br/>',
				valueDecimals: 1,
                valueSuffix: ' °C',
                shared: true
                },
				
            plotOptions: {
                column: {
                    grouping: false,
                    shadow: false,                      
                    }
                },
             
            series: [{
                name: 'Température moyenne',
                data:  comArr(dTemp),
                pointPadding: -0.1,
			    color: {
                    linearGradient: { x1: 0, x2: 0, y1: 0, y1: 1 },
                    stops: [
                    [0, 'rgba(80, 120, 228, .7)'],
                    [1, 'rgba(255, 0, 0, .8)']
                     ]}
             }]
            });
        });
     });     
    </script>
	</head>

<body>
<table width="600" border="0" align="center">
            <tr>
                <td>   
                    <div id="container" style="width: 600px; height: 300px; margin: 0 auto" class="style1"></div>
                    <div align="center"></div>
                </td>
		    </tr>
	    </table>
	</body>
</html>
Les données s'affichent bien mais ce ne sont les données du mai 2019, ce sont les températures moyennes de mai 2004, la première année de mes relevés. (J'ai cherché bien longtemps avant de trouvé à quoi correspondait ces relevés).
https://www.meteo-jarny.com/DY-graphiqu ... inique.php
J'ai fais plusieurs tests en modifiant la variable $moisencours, en ajoutant une autre variable qui pour avoir l'année en cours, sans succès.
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
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Moyenne journalière

Message par PascalWMR » 11 mai 2019, 22:07

Salut Pascal

Ce résultat est normal.
Si tu exécute ta requête avec phpMyAdmin, tu verra qu'elle a extrait tous les mois de mai de ta base de données (idem si tu affiche le code source de ta page, tu constatera qu'il y a un nombre impressionnant de données dTemp dont moisencours=05).
Cependant ton graphique ne reflète pas ce résultat tout simplement parce que l'xAxis est limité à 31 données (défini par le paramètre categories)

Pour avoir les données du mois en cours, il faut passer 2 paramètres à ta requête.
L'année et le mois en cours

Donc, il faut laisser la variable $anencours= date("Y") et la variable $moisencours= date("m")
Logiquement, ta requête SQL deviendrais alors

$sql="SELECT Moy_T FROM noaa_jour WHERE Annee=$anencours AND Mois=$moisencours".

Mais le PHP a ses règles et cette syntaxe n'est pas bonne
Quand on doit passer plusieurs variables à une requête, il faut séparer les variables du restant du code par un point
La bonne syntaxe est alors
$sql="SELECT Moy_T FROM noaa_jour WHERE Annee=".$anencours."AND Mois=".$moisencours

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

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

Re: Moyenne journalière

Message par JP54 » 12 mai 2019, 07:46

Eh oui, si j'avais regardé le code source j'aurais vu qu'il y avait beaucoup de données, ça m'aurait peut-être mis sur la piste.
Dominique et moi avons essayé pas mal de chose comme mettre deux variables année et mois, mais sans résultats sans doute des erreurs dans la requête.
Avec ses petites modifications, ça fonctionne
https://www.meteo-jarny.com/DY-graphiqu ... inique.php
Reste cependant quelques modifs à faire, le titre et le tooltip, mettre mai dans le titre et le jour et le mois dans le tooltip.
Merci beaucoup pour ses explications Pascal, simple et très clairs comme d'habitude ;)
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
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: Moyenne journalière

Message par PascalWMR » 12 mai 2019, 11:33

Salut à tous

C'est ça que tu veux Pascal ?
Température moyenne journalière
T'as vu j'ai même arrondi les angles comme avant :)

Bon là ça va être un peut plus compliqué
  1. Pour le titre d'abord;
    Pour ma part, je trouve plus joli d'écrire Température du mois de ... ou du mois d'...
    C'est pas compliqué mais il se pose un problème pour l'encodage en json des mois avec une apostrophe (d'Avril, d'Août, d'Octobre)
    Une petite recherche sur les options d'encodage json résous le problème.
  2. Pour le tooltip ensuite;
    Tu ne peut plus te contenter d'un tooltip simple. Il faut passer par du useHTML et formatter function()
  3. Toujours pour le tooltip, pour le premier jour du mois, je trouve plus joli d'afficher 1er que 01. :mrgreen:
    La solution passe par un tableau multidimensionnel en PHP
  4. Pour le nombre de jours à afficher sur l'xAxis;
    Il se pose un problème d'esthétique si je puis dire. :roll:
    Avec le code actuel, quel que soit le mois, il y a toujours 31 jours d'affichés sur l'xAxis. C'est pas beau :cry:
    La solution est dans le PHP. Il faut créer une routine de test qui va déterminer le nombre de jours à tracer en fonction du mois (30 ou 31 jours) mais aussi pour les mois de février, tester si l'année est bissextile ou non pour savoir si on trace 28 ou 29 jours.
    Petite indication, cela passe par des tableau multidimensionnel (array('01'=>31,.....)
    Ensuite pour limiter le nombre de jour à afficher, il faut dans le code de l'xAxis rajouter l'option max dont la valeur sera le résultat de la routine de test.
Bon aller, bon courage. Je suis toujours là pour vous conseiller enfin si je suis pas sur la route.

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

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

Re: Moyenne journalière

Message par JP54 » 12 mai 2019, 11:51

Je vois que tu as regardé mes graphiques avec l'ancienne librairie, les angles arrondies c'est nettement plus beau.
Oui, c'est tout à fait ça que je veux, le mois dans le titre et le jours et le mois dans le tooltip.
Merci pour toutes ses infos qui vont bien me servir. Je ne vais pas faire ça aujourd'hui, je profite du soleil et surtout du temps sec pour repiqué mes fleurs.
Je posterais l'avancé des mes modifications.
Encore merci
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
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Moyenne journalière

Message par jturlier » 13 mai 2019, 16:50

Bonjour les Pascal's,
personnellement j'aurais utilisé une requête de ce genre qui n'est valable que pour la période en cours et qui n'a pas besoin de variables php :
$sql="select moy_t from noaa_jour where substring(amj,1,6)=DATE_FORMAT(now(), '%Y%m');"; pour le mois
$sql="select moy_t from noaa_jour where substring(amj,1,4)=DATE_FORMAT(now(), '%Y');"; pour les températures quotidiennes de l'année.
Bonne journée
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

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

Re: Moyenne journalière

Message par JP54 » 13 mai 2019, 17:02

Bonjour Jean,
merci pour l'infos, juste une petite question, mise à part les variables en moins, y-a-t-il une différence entre ta requête et celle de 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
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: Moyenne journalière

Message par jturlier » 14 mai 2019, 04:19

Bonjour Pascal,
Il n'y a aucune différence quant au résultat, la seule qui existe, c'est que PHP n'y intervient pas, elle est en pur SQL.
Jean

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

Re: Moyenne journalière

Message par JP54 » 14 mai 2019, 18:51

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

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: Moyenne journalière

Message par muchistic » 14 mai 2019, 20:09

jturlier a écrit :
13 mai 2019, 16:50
Bonjour les Pascal's,
personnellement j'aurais utilisé une requête de ce genre qui n'est valable que pour la période en cours et qui n'a pas besoin de variables php :
$sql="select moy_t from noaa_jour where substring(amj,1,6)=DATE_FORMAT(now(), '%Y%m');"; pour le mois
$sql="select moy_t from noaa_jour where substring(amj,1,4)=DATE_FORMAT(now(), '%Y');"; pour les températures quotidiennes de l'année.
Bonne journée
Bonjour Jean

je viens d’essayer la requête pour l'année en cours et cela ne fonctionne pas, peux tu me dire si il y a t'il autre chose a modifier dans le fichier ??
https://www.meteo-canejan.fr/graphique/ ... %20sql.php
c'est la même chose avec la requête du mois en cours

bonne soirée

Code : Tout sélectionner

<?php
// appel du script de connexion
require("mysqli_connect.php");                                         
// Récupération des données 
$anencours= date("Y");
$sql="select Moy_T from noaa_jour where substring(AMJ,1,4)=DATE_FORMAT(now(), '%Y');";
$query = mysqli_query($conn,$sql);                   
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
	$dTemp[$i]=round($list['Moy_T']*1,1);// on arrondi à 1 chiffre après la virgule
	$i++;
} 	
mysqli_free_result($query);
mysqli_close($conn);
$xlabel_m = array("Jan","Fev","Mar","Avr","Mai","Juin","Juil","Aout","Sep","Oct","Nov","Dec");
$tabmois = array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");

?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
<script
	src="https://code.jquery.com/jquery-3.3.1.min.js"
	integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
	crossorigin="anonymous">
</script>
<script src="https://code.highcharts.com/highcharts.js" type="text/javascript"></script>
<script src="https://code.highcharts.com/modules/exporting.js" type="text/javascript"></script>
<script src="https://code.highcharts.com/js/themes/gray.js" type="text/javascript"></script>
<script type="text/javascript" src="jquery/overlib.js"></script>
<script type="text/javascript" src="jquery/overlib_fade.js"></script>    

<script type="text/javascript"> 
eval(<?php echo  "'var dLabelm =  ".json_encode($xlabel_m)."'" ?>);
eval(<?php echo  "'var dTime =  ".json_encode($tabmois)."'" ?>);
eval(<?php echo  "'var dTemp =  ".json_encode($dTemp)."'" ?>);
eval(<?php echo  "'var anencours =  ".json_encode($anencours)."'" ?>);
</script>
         <script type="text/javascript"> 
          function comArr(unitsArray) {
            var outarr = [];
            for (var i = 0; i < dTime.length; i++) {
             outarr[i] = [dTime[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: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
            shortMonths: ['Jan.', 'Fév.', 'Mars', 'Avr.', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc'],
            exportButtonTitle: "Exporter",
            printButtonTitle: "Imprimer",
            rangeSelectorFrom: "Du:",
            rangeSelectorTo: "A:",
            rangeSelectorZoom: "Période:",
            resetZoom: 'RAZ Zoom',
            resetZoomTitle: '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",
			printChart: "Imprimer le graphique",
            exportButtonTitle: "Exporter image ou document",
            printButtonTitle: "Imprimer le graphique",
            loading: "Chargement...",
            thousandsSep: ""
            }
          });
            chart = new Highcharts.Chart({
                chart: {
                renderTo: 'container',
                zoomType: 'x',
                type: 'column',
				marginRight: 10,
                marginBottom: 60,
				plotBorderColor: '#346691',
				plotBorderWidth: 1,
                },
            title: {
                text: 'Température moyenne année '+anencours,
			    style: {
                color: '#BDBDBD',
                fontWeight: 'bold'}
                },
				
            subtitle: {
                text: 'Source: Météo Jarny',
                x: -20
                },

            credits: {
                text: '© Météo Jarny',
                href: ''
                },

            xAxis: {
                categories: dLabelm,
                labels: {
                    rotation: 0,
                    align: 'center',
                    style: {
                        fontSize: '13px',
                        fontFamily: 'Verdana, sans-serif'
                        }
                    }
                },
				
                yAxis: [{
                    title: {
                        text: '',
                        },
                    labels: {
                        formatter: function() {
                        return this.value +' °C';
                        },
                        style: {
                            color: '#BDBDBD'
                        }
                    },           
                }
            ],

            legend: {
                enabled: false,
                x: 0
                },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.y}</b><br/>',
				valueDecimals: 1,
                valueSuffix: ' °C',
                shared: true
                },
				
            plotOptions: {
                column: {
                    grouping: false,
                    shadow: false,                      
                    }
                },
             
            series: [{
                name: 'Température moyenne',
                data:  comArr(dTemp),
                pointPadding: -0.1,
			    color: {
                    linearGradient: { x1: 0, x2: 0, y1: 0, y1: 1 },
                    stops: [
                    [0, 'rgba(80, 120, 228, .7)'],
                    [1, 'rgba(255, 0, 0, .8)']
                     ]}
             }]
            });
        });
     });     
    </script>
	</head>

<body>
<table width="600" border="0" align="center">
            <tr>
                <td>   
                    <div id="container" style="width: 600px; height: 300px; margin: 0 auto" class="style1"></div>
                    <div align="center"></div>
                </td>
		    </tr>
	    </table>
	</body>
</html>
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

Répondre