Page 1 sur 5

La température avec normales saisonnière

Posté : 23 nov. 2014, 17:40
par PascalWMR
Bonjour

Voici un graphique qui à première vue est tous simple. Mais ça fait deux jours que je le cogite.
https://www.monsite-meteo.eu/PC/G-HS-Temperatures.php

Il représente la température avec, au milieu de la zone de traçage, ce qui semble être un yAxis.plotBands indiquant les températures normales de saison.

Mais que neni, ce graphique est un graphique de type areasplinerange tout comme l'est le graphique de l’amplitude thermique journalière de Pierre-André.

Le truc, est que je voulais justement un plotBands indiquant les mini et maxi de saison. Mais lors du changement de mois, la méthode conventionnelle si je puis dire, ne fonctionnait plus :cry: .
Alors :idea: j'ai eu l'idée de faire un graphique areasplinerange en m'inspirant de ce graphique de demo Highcharts http://www.highcharts.com/demo/arearange-line

Pour vous convaincre, faite un clic droit sur le graphique puis cliquez sur Afficher le code source de la page et vous constaterez que les données sont encodées en format array() si je puis dire.

Le nombre de données encodées dans ce graphique étant conséquent, il convient de limiter la période à afficher. Perso j'ai essayé sur 31 jours, mais là, même si le temps d'encodage est bon, ce qui pêche, c'est l'affichage du tooltip. Pourtant j'ai un processeur I7 950 cadencé à 3.07 Ghz

Bon aller pour ceux que ça intéresse, voici le code permettant d'encoder les données. :mrgreen:

Code : Tout sélectionner

<?php
// appel du script de connexion
require("../Scripts/mysqli_connect.php");                     
// On récupère le timestamp du dernier enregistrement
$sql="select max(tstamp) from data";
$query = mysqli_query($conn,$sql);                  
$list=mysqli_fetch_array($query);     

// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données des dernières xx heures
$stop=$list[0];
$start=$stop-(86400*2);

// Récupération des données sur les dernières 48 heures avec un tri ascendant sur le timestamp
$sql = "SELECT tstamp, outdoortemperature, windchill, dewpoint, outdoorheatindex FROM data where tstamp >= '$start' and  tstamp <= '$stop' ORDER BY 1";  
$query = mysqli_query($conn,$sql);                   
$i=0;
$tnnormales = array();
$outdoortemperature = array();
$windchill = array();
$dewpoint = array();
$outdoorheatindex = array();
while ($list = mysqli_fetch_assoc($query)) {      
if (date("I",time())==0) { 
	$time[$i]=($list['tstamp']+3600)*1000;
	$mois[$i]=(date("m",$list['tstamp']+3600));
	} 
else {
	$time[$i]=($list['tstamp']+7200)*1000;
	$mois[$i]=(date("m",$list['tstamp']+7200));
  } 
// Normales Mini et Maxi de la station météo France de Metz-Marly-Frescaty
if ($mois[$i]==01) {$tnmin[$i]=-0.5; $tnmax[$i]=4.8;}
elseif ($mois[$i]==02) {$tnmin[$i]=-0.4; $tnmax[$i]=6.6;}
elseif ($mois[$i]==03) {$tnmin[$i]=2.4; $tnmax[$i]=11;}
elseif ($mois[$i]==04) {$tnmin[$i]=4.7; $tnmax[$i]=15;}
elseif ($mois[$i]==05) {$tnmin[$i]=8.9; $tnmax[$i]=19.5;}
elseif ($mois[$i]==06) {$tnmin[$i]=12; $tnmax[$i]=22.7;}
elseif ($mois[$i]==07) {$tnmin[$i]=14.1; $tnmax[$i]=25.3;}
elseif ($mois[$i]==08) {$tnmin[$i]=13.6; $tnmax[$i]=24.8;}
elseif ($mois[$i]==09) {$tnmin[$i]=10.4; $tnmax[$i]=20.4;}
elseif ($mois[$i]==10) {$tnmin[$i]=7.1; $tnmax[$i]=15.1;}
elseif ($mois[$i]==11) {$tnmin[$i]=3.2; $tnmax[$i]=9;}
elseif ($mois[$i]==12) {$tnmin[$i]=0.7; $tnmax[$i]=5.5;}

$tnnormale[] = array($time[$i],(float)$tnmin[$i], (float)$tnmax[$i]);
$outdoortemperature[] = array($time[$i],(float)$list['outdoortemperature']*1);
$windchill[] = array($time[$i],(float)$list['windchill']*1);
$dewpoint[] = array($time[$i],(float)$list['dewpoint']*1);
$outdoorheatindex[] = array($time[$i],(float)$list['outdoorheatindex']*1);
$i++;

}
$FermerConnexion= mysqli_close($conn);
?>

<script type="text/javascript"> 
eval(<?php echo  "'var outdoortemperature =  ".json_encode($outdoortemperature)."'" ?>);  
eval(<?php echo  "'var windchill =  ".json_encode($windchill)."'" ?>);  
eval(<?php echo  "'var dewpoint =  ".json_encode($dewpoint)."'" ?>);  
eval(<?php echo  "'var outdoorheatindex =  ".json_encode($outdoorheatindex)."'" ?>);  
eval(<?php echo  "'var tnnormales= ".json_encode($tnnormale)."'" ?>);  

</script>
Sympa le Pascal :D

A+
Pascal

Re: La température avec normales saisonnière

Posté : 23 nov. 2014, 20:08
par Météo Villarzel
Salut Pascal,

Super, merci pour le partage, je vais certainement utiliser ta requête très prochainement.
Pour le moment je suis sur un autre projet, hors météo, quoi que.. ou je dois aussi jongler avec des bases de données, mais je vous en dirait un peu plus dans quelques jours.

Bonne soirée

A+

Re: La température avec normales saisonnière

Posté : 24 nov. 2014, 19:00
par JP54
Graphique très intéressant, merci beaucoup pour la partage.
Pour les normales de saisons, je pense que tu prends les températures moyennes maxi et moyenne mini de chaque mois

Re: La température avec normales saisonnière

Posté : 25 nov. 2014, 09:33
par PascalWMR
Bonjour
JP54 a écrit : Pour les normales de saisons, je pense que tu prends les températures moyennes maxi et moyenne mini de chaque mois
Oui JP, c'est cela, je prends en référence les moyennes mini et maxi.

A+
Pascal

Re: La température avec normales saisonnière

Posté : 25 nov. 2014, 18:35
par JP54
Ok merci.
Il serait peut-être intéressant de faire ce graphique mais avec les températures moyennes journalières. Ce qui permettrait de voir ou se situe la moyenne de jour par rapport au moyenne maxi et mini.

Re: La température avec normales saisonnière

Posté : 25 nov. 2014, 19:34
par Javier
Saludos Pascal

Très bonne idée et un beau graphique! :D

http://kocher.es/graficos-highcharts/te ... normal.php

Il ne reste plus qu'à affiner les couleurs.

Merci beaucoup

Re: La température avec normales saisonnière

Posté : 26 nov. 2014, 05:06
par PascalWMR
Bonjour
JP54 a écrit :Ok merci.
Il serait peut-être intéressant de faire ce graphique mais avec les températures moyennes journalières. Ce qui permettrait de voir ou se situe la moyenne de jour par rapport au moyenne maxi et mini.
Oui JP je suis d'accord avec toi, mais un tel graphique existe déjà. Certe, il n'est pas encore en ligne mais il existait sur l'ancien site.

Par contre, ce que je voulais démontrer avec ce graphique, pour le quidam moyen, quand il le regarde, c'est de se dire, comme on nous le dis dans les prévisions météo à la télé, Est ce que la température qu'il fait en ce moment est normale. Fait plus chaud ou plus froid que ce qu'il devrait faire.
Voila, c'est l'idée de ce graphique, car tu le sais comme moi, la température moyenne ne reflète pas celle qu'il fait réellement. Surtout dans notre région, on peut très bien avoir des températures bien inférieures à la normale la nuit et dans la même journée, des températures bien supérieures à la normale. Une courbe moyenne, aplanirait cet écart et ferait rentrer la moyenne dans la moyenne si je puis dire.

Bonne journée

A+
Pascal

Re: La température avec normales saisonnière

Posté : 26 nov. 2014, 06:43
par JP54
Entièrement d'accord avec toi. J'avais bien compris pourquoi tu avais créé ce graphique.
Pour la petit histoire j'en ai entendu une bonne ce matin au info je pense que tu as déjà entendu la même. "Il a plu l'équivalent de deux mois de pluie en quelques heures"
Qui à mon avis ne veut rien dire vu qu'on ne dit pas combien est l'équivalent de deux mois de pluie et deux mois de pluie ici en Lorraine est totalement défférent de deux mois de pluie dans le sud. ça rejoint un peu ce qu'on entend régulièrement "Les températures sont dessus des normales" C'est combien les normales.

Re: La température avec normales saisonnière

Posté : 26 nov. 2014, 12:15
par Javier
JP54 a écrit :Ok merci.
Il serait peut-être intéressant de faire ce graphique mais avec les températures moyennes journalières. Ce qui permettrait de voir ou se situe la moyenne de jour par rapport au moyenne maxi et mini.
Les valeurs de la température quotidienne maximale et minimale, nous les avons dans le tableau MiniMaxidata:

t_out_maxi
t_out_mini

Si nous pouvions obtenir la moyenne de ces valeurs pendant les années de fonctionnement de la station, nous aurions nos valeurs journalières "normales".

Le problème est de mettre cela en pratique :roll:

Re: La température avec normales saisonnière

Posté : 18 déc. 2014, 23:03
par Météo Villarzel
Salut Pascal

Un truc de ouf, j'ai voulu essayer d'intégrer ta requête sur ce graphique
http://www.boock.ch/meteo/graphiques_ph ... rature.php

ça fonctionne nickel, sauf pour les mois d'août et septembre de toutes les années, j'ai recommencé 5 fois et toujours ces deux mois qui restent à 0

par exemple

http://www.boock.ch/meteo/graphiques_ph ... 18-10-2014

et mes normales sont OK

Code : Tout sélectionner

if 	   ($mois[$i]==01) {$tnmin[$i]=-2.5; $tnmax[$i]=3.0;}
elseif ($mois[$i]==02) {$tnmin[$i]=-2.2; $tnmax[$i]=4.9;}
elseif ($mois[$i]==03) {$tnmin[$i]=0.8; $tnmax[$i]=10.1;}
elseif ($mois[$i]==04) {$tnmin[$i]=3.4; $tnmax[$i]=14.1;}
elseif ($mois[$i]==05) {$tnmin[$i]=7.8; $tnmax[$i]=18.8;}
elseif ($mois[$i]==06) {$tnmin[$i]=11; $tnmax[$i]=22.3;}
elseif ($mois[$i]==07) {$tnmin[$i]=12.9; $tnmax[$i]=25.2;}
elseif ($mois[$i]==08) {$tnmin[$i]=12.7; $tnmax[$i]=24.5;}
elseif ($mois[$i]==09) {$tnmin[$i]=9.5; $tnmax[$i]=19.7;}
elseif ($mois[$i]==10) {$tnmin[$i]=6.1; $tnmax[$i]=14.1;}
elseif ($mois[$i]==11) {$tnmin[$i]=1.3; $tnmax[$i]=7.3;}
elseif ($mois[$i]==12) {$tnmin[$i]=-1.2; $tnmax[$i]=3.8;}

$tnnormale[] = array($time[$i],(float)$tnmin[$i], (float)$tnmax[$i]);
étranges :ugeek:

A+