IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Modifier la couleur d'un graphique en fonction des valeurs [Chart.js]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Modifier la couleur d'un graphique en fonction des valeurs
    Bonjour à tous !
    J'ai une question pratique pour la création d'un graphique jauge. J'ai des données contenues dans un JSON que j'importe dans mon graphique jauge. J'aimerais que le graphique jauge change de couleurs en fonction du nombre de places de parking occupées, suivant le système suivant :
    - si le total du créneau horaire sélectionné est inférieur à 567 places occupées (soit moins de la moitié du total des places de parkings), la jauge sera en vert
    - si le total du créneau horaire sélectionné est compris entre 567 et 850 places occupées (soit entre la moitié et les 3/4 des places de parkings), la jauge sera en orange
    - si le total du créneau horaire sélectionné est compris entre 850 et 1133 places occupées (soit entre les 3/4 et la totalité des places de parkings), la jauge sera en rouge
    - si le total du créneau horaire sélectionné est supérieur à 1133 places occupées, la jauge sera en noir

    Mon JSON se présente ainsi :
    Nom : parking.PNG
Affichages : 567
Taille : 13,9 Ko

    Mon code actuel (cela fonctionne, j'ai bien le nombre de places, mais la couleur reste toujours verte).

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <!DOCTYPE html>
    <html>
    <head>
     
      <meta charset="UTF-8">
      <meta name ="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
      <title>essai js</title>
      <link rel="stylesheet" href="css/bootstrap.css">
      <link rel="stylesheet" href="css/bootstrap-grid.min.css">
      <link rel="stylesheet" href="css/bootstrap-reboot.min.css">
      <link rel="stylesheet" href="css/monstyle.css">
      <link rel="stylesheet" href="css/Chart.min.css">
      <script src="js/jquery.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
     
     
     
    </head>
     
    <body>
     
        <canvas id="myChart" ></canvas>
     
    <script>
     
    var texteliste=""
      var donnees=[] //var donnees=new Array()
      var date=[]
      var creneauhoraire=[]
      var placesoccupees=[]
     
        $.getJSON("json/parking.json", function(data){
          for(var i=0;i<data.length;i++){
          if (data[i].date=="2020-08-13"& data[i].creneauhoraire=='22h-00h'){
          donnees.push([data[i].creneauhoraire,data[i].placesoccupees])
     
     
     
     
          //console.log(data[i].fields.nombre_plaintes)
          //texteliste+="<li>Année : "+data[i].fields.annee+", nombre de plaintes : "+data[i].fields.nombre_plaintes+"</li>"
            }      
            }
            donnees=donnees.sort()
            console.log(donnees)
     
            var contenudiv=""
            for(var i=0;i<donnees.length;i++){
      creneauhoraire.push(donnees[i][0])
      placesoccupees.push(donnees[i][1])
     
     
            //texteliste+="<li>Année : "+donnees[i][0]+", nombre de plaintes : "+donnees[i][1]+"</li>"
          }
          //  $("#liste").append(texteliste)
     
    //}).done(function() {
     
     
    var ctx = document.getElementById('myChart').getContext('2d');
    var chart = new Chart(ctx, {
        // The type of chart we want to create
        type: 'doughnut',
     
        // The data for our dataset
        data: {
            labels: ['Nombre de places de parkings'],
            datasets: [{
                label: 'Créneau horaire',
                backgroundColor: ['green', 'orange', 'red', 'black'],
                borderColor: ['green', 'orange', 'red', 'black'],
                data: [placesoccupees]
            }]
        },
     
        // Configuration options go here
        options: {
            circumference : 1 * Math.PI,
            rotation : 1 * Math.PI,
                }
    });
        })
    </script>
    <script src="js/Chart.min.js"></script>
    </body>
     
    </html>


    Je pense que je dois créer une fonction et des conditions du style if placesoccupees>567, met toi en vert Mais je sais pas trop comment l'écrire ni où

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous pouvez créer la liste des couleurs dans la même boucle où vous créez la liste des valeurs.

    je me demandais juste si le choix d'afficher sous forme de camembert est définitif ? étant donné qu'il s'agit d'afficher un taux d'occupation, j'aurais mieux vu un affichage sous forme d'histogramme qui permet de voir la différence de fréquentation entre chaque période comme cela par exemple :
    https://jsfiddle.net/qrwvvtxs/3/

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour Mathieu,
    Merci pour votre retour.
    En fait, c'est une jauge que je souhaiterais mettre en place. En fonction du nombre de places occupées, et suivant des modalités déterminées, la jauge aurait telle ou telle couleur et permettrait d'alerter si le seuil d'alerte est dépassé ...

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 410
    Points : 4 851
    Points
    4 851
    Par défaut
    Bonjour,

    Pour les couleurs c'est simple, une boucle $.map sur placesoccupees retourne un tableau contenant les couleurs que tu cherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let bgColors=$.map(placesoccupees,function(value,i){
    	return value<567?"green":value>567 && value<850?"orange":value>=850&&value<=1133?"red":value>1133?"black":"none";
    });
    Reste ensuite l'affecter à la propriété backgroundColor de datasets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    datasets: [{
                label: 'Créneau horaire',
                backgroundColor: bgColors,
                borderColor: ['green', 'orange', 'red', 'black'],
                data: placesoccupees //Pas de crochets "[]" ici, seulement placesoccupees
            }]

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ton aide, le code proposé fonctionne parfaitement ! Vraiment merci beaucoup ! Je vais essayer de l'adapter pour avoir vraiment ce que je souhaitais, mais ça correspond tout à fait à ce que je recherchais !
    Une étape de validée, me reste désormais encore beaucoup d'autres graphiques à faire fonctionner, car ils ne veulent pas fonctionner alors que je n'ai pas de message d'erreur particulier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/02/2018, 09h24
  2. [XL-2003] Modifier la couleur d'une cellule en fonction d'un choix
    Par Un Internaute dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/11/2015, 08h52
  3. [XL-2007] Couleur titre graphique en fonction de valeur de cellule
    Par Samus92500 dans le forum Excel
    Réponses: 1
    Dernier message: 31/10/2013, 11h38
  4. Modifier les couleurs d'un graphique après filtre
    Par Vivi127 dans le forum VBA Access
    Réponses: 8
    Dernier message: 01/08/2012, 12h30
  5. Réponses: 2
    Dernier message: 24/02/2010, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo