Code source du fichier pages-doc/bargraph1.html

<html>

<head>
    <title>Phpcovid : Bargraphes similaires au site officiel</title>
    <meta name=author content="Bernard Chardonneau">
    <meta name=copyleft content="Logiciel et données publiés dans le domaine public">
    <meta name=robots content="noindex,follow">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link href="css/misenpage.css" rel="stylesheet" type="text/css">
    <link href="css/styles.css" rel="stylesheet" type="text/css">
</head>

<body>
  <div id="contenu">
      <h1>Bargraphes similaires au site officiel</h1>
      Comme indiqué dans le titre, cette page est destinée à montrer comment
      réaliser facilement des bargraphes qui ont le même aspect que sur le
      site officiel.<br>
      <br>
      Plus précisément, une fois la page du site officiel téléchargée et
      partiellement visible dans la fenêtre du navigateur web, il faut cliquer
      sur "Couverture vaccinale par classe d’âge" pour faire apparaître une
      série de bargraphes qui va mettre sur certains ordinateurs largement
      plus de 10 secondes à s'afficher.<br>
      <br>
      Le but de cette page est de montrer comment réaliser la même chose en
      une fraction de secondes en utilisant les possibilités du langage HTML.<br>
      <br>
      Pour réaliser ces bargraphes, 6 images ont été préparées et enregistrées
      dans le sous-répertoire img-ref. Il s'agit d'images BMP rectangulaires de
      500x50 pixels et de couleur unie. Au début, les couleurs pour la première
      et la deuxième dose de vaccin reprenaient celles du site officiel. Comme
      ce site n'indique rien pour les doses supplémentaires, une troisième et
      une quatrième couleur ont été choisies en fonction des deux autres. Puis,
      comme avec la 5ème dose l'étagement des couleurs était de plus en plus
      mauvais, il a été refait en prévoyant à l'avance une 6ème dose.<br>
      <br>
      Affichées telle quelles, ces 6 images donnent ceci&nbsp;:<br>
      <br>
      <img src="img-ref/barre_dose1.bmp">&nbsp;<br>
      <img src="img-ref/barre_dose2.bmp">&nbsp;<br>
      <img src="img-ref/barre_dose3.bmp">&nbsp;<br>
      <img src="img-ref/barre_dose4.bmp">&nbsp;<br>
      <img src="img-ref/barre_dose5.bmp">&nbsp;<br>
      <img src="img-ref/barre_dose6.bmp"><br>
      <br>
      Pour l'instant, on n'exploite que les 5 premières couleurs.<br>
      <br>
      On va utiliser la possibilité de modifier la proportion largeur/hauteur
      d'une image pour afficher les bargraphes.<br>
      <br>
      On utilise le modèle de fichier HTML <tt>bargraphe-age1.html</tt> dont
      la partie droite de la page contient le code suivant&nbsp;:<br>
!vsource exemples-code/droite-bargraphe-age1.html
      En l'absence de traitement, ce modèle de fichier HTML donne le résultat
      suivant&nbsp;:<br>
      <br>
      <iframe src="exemples-code/bargraphe-age1.html" width="800" height="220">
      </iframe><br>
      <br>
      On remarque que la liste des bargraphes apparaîtra dans une table
      alignée au centre de la zone d'affichage principale de la page web.<br>
      <br>
      Cette manière de procéder permettra à la fois d'avoir les bargraphes
      relativement centrés dans la partie droite de la page, tout en gardant
      ces bargraphes de longueur différentes alignés entre eux du coté
      gauche.<br>
      <br>
      Le script PHP <tt>bargraphe-age1.php</tt> va devoir mettre la date de
      l'état de vaccination à la place de <tt>XXXDATE</tt> puis générer une
      liste de bargraphes correspondant aux différentes classes d'âge à la
      place de la ligne contenant <tt>XXXLISTE</tt><br>
      <br>
      On commence par actualiser lorsque c'est nécessaire le fichier csv local
      <tt>vacsi-tot-a-fra.csv</tt> avant de l'ouvrir en lecture.<br>
!vsource exemples-code/acces-tot-a-fra.php
      Ensuite, si l'ouverture du fichier s'est bien passée, on récupère et on
      affiche la date présente au début de ce fichier après l'avoir mise au
      format jj/mm/aaaa<br>
!vsource exemples-code/affdate.php
      On recopie la suite du fichier HTML jusqu'à l'endroit où on peut rentrer
      les différents bargraphes et on saute les classe d'âge jusqu'à 4 ans
      (11 ans à la mise en ligne du site en octobre 2021) pour lesquelles le
      taux de vaccination est infime.<br>
!vsource exemples-code/saut-cl-age-inf5.php
      On récupère le nombre de doses de vaccin mémorisées dans le fichier csv
      local.<br>
!vsource exemples-code/compte-doses.php
      On va alors traiter les autres classes d'âge. Chaque classe d'âge
      commence un an après l'âge limite de la classe d'âge précédente.<br>
      <br>
      Après avoir lue la ligne du fichier <tt>vacsi-tot-a-fra.csv</tt>
      correspondant à une nouvelle classe d'âge, on en extrait les différents
      champs (appel de la fonction <tt>explode (...)</tt>), puis on génère le
      texte correspondant à la classe d'âge concernée comme on l'avait fait
      dans le fichier <tt>table-age.php</tt><br>
      <br>
      On va alors générer 3 bargraphes correspondant aux différentes doses de
      vaccin, puis on recommence avec la classe d'âge suivante jusqu'à ce qu'on
      ait traité celle qui concerne les personnes "à partir de 80 ans".<br>
!vsource exemples-code/explore-cl-age.php
      La présentation des taux de vaccination pour une classe d'âge commence
      par l'affichage d'un titre indiquant de quelle classe d'âge il s'agit.<br>
      <br>
      Ensuite, on va afficher les bargraphes correspondant aux taux de
      vaccination pour les différentes doses. Une boucle va réaliser autant de
      fois qu'il y a de doses, le même type de traitement avec des paramètres
      différents.<br>
      <br>
      Les différents taux de vaccination figurent dans les argument 5, 6 et 7
      de chaque ligne du fichier csv local.<br>
      <br>
      Pour chaque dose du vaccin, on va afficher une image rectangulaire de
      la couleur indiquée dans la légende pour cette dose de vaccin.<br>
      <br>
      On utilise la possibilité offerte par le langage HTML et les navigateurs
      web de redimensionner les images, y compris en modifiant la proportion
      largeur/hauteur.<br>
      <br>
      La largeur d'affichage choisie est de 500 pixels pour un taux de
      vaccination de 100&nbsp;% (soit une résolution d-affichage de 0,2&nbsp;%
      par pixel).<br>
      <br>
      Avant d'afficher le bargraphe, on calcule le nombre de pixels que l'image
      devra avoir en largeur. Mais on doit préciser également une hauteur fixe
      (40 pixels) pour cette image, sinon, largeur et hauteur seront modifiées
      dans les même proportions.<br>
      <br>
      A droite de l'image, on affiche le pourcentage correspondant. On peut
      remarquer que des balises <tt>&lt;sup&gt;...&lt;/sup&gt;</tt> encadrent
      le pourcentage indiqué. Si on ne le fait pas, ces pourcentages sont
      affichés plus bas et donc mal centrés par rapport à l'image.<br>
      <br>
      Cependant l'emploi de ces balises a comme effet secondaire d'afficher
      les pourcentages en caractères plus petits. Pour y remédier, une taille
      de caractères de 150&nbsp;% a été déclarée dans le modèle de fichier
      HTML pour la table qu'on est en train de remplir.<br>
      <pre>
    &lt;table border="0" align="center" style="font-size:150%"&gt;
        XXXLISTE
    &lt;/table&gt;</pre>
      Et comme il est souhaitable que les titres qui mentionnent les classes
      d'âge soient plus gros, il n'y a pas besoin de modifier une autre fois
      la fonte utilisée pour leur affichage.<br>
      <br>
      Voici le code PHP de la partie permettant de générer les bargraphes.<br>
!vsource exemples-code/aff-bargraphes1.php
      Exemple de code généré le 29 novembre 2021 avec seulement 3 doses de
      vaccin&nbsp;:<br>
!vsource exemples-code/table-bargraphe1.html
      Et le résultat visuel :<br>
      <br>
      <iframe src="exemples-code/iframe-table-bargraphe1.html" width="700px"
              height="210px"></iframe><br>
      <br>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>

</html>