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 .
Alors 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.
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>
A+
Pascal