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 :

Caché une courbe en fonction d'un argument dans la fonction [Chart.js]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    bidouilleur amateur
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : bidouilleur amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut Caché une courbe en fonction d'un argument dans la fonction
    Bonjour,

    Tout d’abord je tiens à préciser que mon niveau en js est proche de zero...

    Dans ma page php, j'appel une fonction pour afficher un graphique, qui fonctionne très bien:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="courbe">
                        <canvas id="mycanvas">
                            <script type="text/javascript">
                                 courbe()
                            </script>
     
                        </canvas>
                    </div>
    Le code js:
    Code : 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
    function courbe(){
    Chart.plugins.register({
     
     
    });
    $(document).ready(function(){
      $.ajax({
        url: "http://localhost/js/data.php",
        method: "GET",
        success: function(data) {
          console.log(data);
          var tempair = [];
          var ph= [];
          var redox= [];
          var pression= [];
          var heure = [];
     
          for(var i in data) {
            tempair.push(data[i].tempair);
            ph.push(data[i].ph);
            redox.push(data[i].redox);
            pression.push(data[i].pression);
            heure.push(data[i].heure);
     
          }
     
          var chartdata = {
            labels: heure,
            datasets : [
              {
                label: 'tempeau ',
    	    fill: false,
     
                borderColor: 'rgba(72, 197, 237, 0.75)',
                hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                hoverBorderColor: 'rgba(200, 200, 200, 1)',
                data: tempair
     
              },
     
              {
                label: 'Ph ',
    	    fill: false,
     
                borderColor: 'rgba(100, 200, 80, 0.75)',
                hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                hoverBorderColor: 'rgba(200, 200, 200, 1)',
                data: ph
              },
              {
                label: 'redox ',
    	    fill: false,
     
                borderColor: 'rgba(220, 60, 60, 1)',
                hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                hoverBorderColor: 'rgba(200, 200, 200, 1)',
                data: redox
              },
              {
                label: 'pression ',
    	    fill: false,
     
                borderColor: 'rgba(60, 60, 2, 0.75)',
                hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
                hoverBorderColor: 'rgba(200, 200, 200, 1)',
                data: pression,
    		hidden: true
              }
            ]
          };
     
          var ctx = $("#mycanvas");
     
          var myLineChart = new Chart(ctx, {
            type: 'line',
            data: chartdata
          });
        },
        error: function(data) {
          console.log(data);
        }
      });
    });
    }
    Ce que je souhaiterais faire, c'est qu'en fonction d'un argument avec la fonction courbe() qu'une partie des données soit masquée à l'affichage du graphique, par exemple:
    ne m'afficherais pas les données data:pression au chargement du graphique ,
    que
    ne m'afficherais pas les données data: tempair
    etc.
    J'arrive à masquer certaines données avec hidden:true mais ce n'est pas propre.

    Si vous avez des exemples je prend
    merci

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjour,
    reste à savoir si tu veux supprimer ou ne pas afficher les données.

    Dans les deux cas tu peux modifier tes chartdata.datasets une fois celles-ci initialisées.

    En supposant que le paramètre de ta fonction soit param déclaré comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function courbe(param) {
        // le corps de la fonction
    }
    cas #1 : suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (param) {
        // formatage pour le test
        param = param.trim().toLowerCase();
        const dataChart = chartdata.datasets;
        // si l'on veut supprimer la série
        chartdata.datasets = dataChart.filter((data) => param !== data.label.trim().toLowerCase());
    }
    cas #2 : ne pas afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (param) {
        // formatage pour le test
        param = param.trim().toLowerCase();
        const dataChart = chartdata.datasets;
        // si l'on veut cacher la série
        dataChart.forEach((data) => {
            data.hidden = param === data.label.trim().toLowerCase();
        });
    }
    et la suite de ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var ctx = document.getElementById("canvas");
    var myLineChart = new Chart(ctx, {
        type: 'line',
        data: chartdata
    });

  3. #3
    Membre averti
    Homme Profil pro
    bidouilleur amateur
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : bidouilleur amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    super merci, je vais tester ça

  4. #4
    Membre averti
    Homme Profil pro
    bidouilleur amateur
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : bidouilleur amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    C'est bon ça fonctionne, je te remercie

  5. #5
    Membre averti
    Homme Profil pro
    bidouilleur amateur
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : bidouilleur amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    J'essais de masquer les chartdata.datasets avec ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (param) {
        // formatage pour le test
        param = param.trim().toLowerCase();
        const dataChart = chartdata.datasets;
        // si l'on veut cacher la série
        dataChart.forEach((data) => {
            data.hidden = param === data.label.trim().toLowerCase();
        });
    }
    Ca fonctionne très bien avec un seul argument dans la fonction,
    mais si je veux en masquer plusieurs, ca ne fonction pas, j'ai l’impression que la fonction forEach() n'es pas adapté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      if (param,param2){
        // formatage pour le test
        const dataChart = chartdata.datasets;
        param = param.trim().toLowerCase();
        param2 = param2.trim().toLowerCase();
     
        // si l'on veut cacher la série
        dataChart.forEach((data) => {
            data.hidden = param === data.label.trim().toLowerCase();
            data.hidden = param2 === data.label.trim().toLowerCase();
     
        });

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Dans ton cas on va considérer que tu écrire indifféremment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // pas de paramètre
    courbe();
    // un seul paramètre
    courbe("ph");
    // plusieurs paramètres, on utilise un Array
    courbe(["ph", "redox"]);
    La fonction devient dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (param) {
      [].concat(param).forEach((el) => {
        // formatage pour le test
        el = el.trim().toLowerCase();
        const dataChart = chartdata.datasets;
        // si l'on veut cacher la série
        dataChart.forEach((data) => {
          data.hidden = el === data.label.trim().toLowerCase() || data.hidden;
        });
      });
    }
    [EDIT] correction code pour ajout de || data.hidden prenant en compte l'état précédent,

    l'astuce consiste à utiliser, [].concat(param), pour forcer un Array même si l'on a qu'un paramètre.


    j'ai l’impression que la fonction forEach() n'es pas adapté.
    Voir : Array.prototype.forEach()

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

Discussions similaires

  1. [Débutant] Trouver l'équation d'une courbe en fonction d'un tableau de valeur
    Par mahmoudbs dans le forum MATLAB
    Réponses: 5
    Dernier message: 04/08/2012, 22h38
  2. Tracer une courbe en fonction des valeurs dans un fichier
    Par Yann_69 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/04/2012, 09h03
  3. [Débutant] Charger des données et tracer une courbe en fonction de ces données
    Par nilsmatlab dans le forum Interfaces Graphiques
    Réponses: 16
    Dernier message: 31/05/2011, 15h34
  4. Affichage d'une courbe en fonction du temps
    Par marouene_ dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 11/03/2011, 11h44
  5. Tracer une courbe en fonction du clavier
    Par ramdamriddim dans le forum Général Java
    Réponses: 0
    Dernier message: 10/10/2009, 00h13

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