Chart.js prendre le max d'une courbe

Bonjour à toutes et à tous,

Dans Chart.js, je voudrais prendre le max d'affichage d'une courbe pour l'appliquer à une autre courbe. Le problème est que le max d'affichage d'une courbe : maxAff ( à qui on laisse le soin de calculer son propre max) n'est pas le max des valeurs : maxVal, mais une valeur arrondie un peu supérieure.

Si de mon côté, je calcule le max des valeurs, je vais trouver maxVal.

Je voudrais utiliser maxAff. Connaissez-vous la syntaxe pour ce faire ?

Cordialement.

Pierre.

Si votre axe Y s’appelle y essayez de récupérer la valeur

Let yMaxAff = chart.scales['y'].max;

Puis dans l’autre graphique régler les options

options: { scales: { y: { max: yMaxAff } } }

Ou

options: { scales: { y: { suggestedMax: yMaxAff } } }

Merci J-M-L pour cette proposition.

Pour autant, ça n'a pas l'air de fonctionner. Voici le morceau de code où j'ai inclus ce que j'ai fait et votre proposition :

              rows.forEach(row => {
                const [label, value0, value1, value2] = row.split(','); // Enregistrement de 3 valeurs : U, I, P
                labels.push(label);
                pAct = -parseFloat(value0);
                values0.push(pAct);
                pOnd = parseFloat(value1);
                values1.push(pOnd);
                values2.push(parseFloat(value2));
                if (pAct < 0)
                  kWhSurplus -= pAct*30*jTokWh;
                values3.push(kWhSurplus);
                kWhProdTot += pOnd*30*jTokWh;
                values4.push(kWhProdTot);
                if (kWhProdTot > maxProd) // mon calcul du max
                  maxProd = kWhProdTot;
              });   
              chart2.resetZoom();          
              chart2.data.labels = labels;
              chart2.data.datasets[0].data = values0;
              chart2.data.datasets[1].data = values1;
              chart2.data.datasets[2].data = values2;
              chart2.data.datasets[3].data = values3;
              chart2.data.datasets[4].data = values4;
              maxProd = Math.round(1.1*maxProd); // Mon adaptation pour avoir une marge
              alert(maxProd); // L'affichage de mon calcul
              maxProd = chart2.scales['y4'].max; // votre proposition
              alert(maxProd); // L'affichage de votre proposition
              chart2.options.scales.y3 = {
                max: maxProd,
                display: true,
                position: 'left',
                title : {
                  display: true,
                  text: 'Energie (kWh)',
                }
              };
              chart2.options.scales.y4 = { // On n'affiche qu'un seul axe car les échelles sont les mêmes entre y3 et y4
                max: maxProd,
                display: false,
                position: 'left',
                title : {
                  false: false,
                  text: 'Energie (kWh)',
                }
              };
              chart2.update();
            });

Dans les conditions de fonctionnement, l'affichage de ma proposition donne 4 puis un autre valeur au fur et à mesure des évolutions ; celle de votre proposition donne toujours 1.

Mais peut-être l'ai-je mal transcrite.

Cordialement.

Pierre.

Je pense que si vous la lisez avant le premier update(), elle vaut encore sa valeur par défaut.

➜ vous devez effectuer un premier update() pour que Chart.js calcule les échelles à partir des nouvelles données.
Ensuite, vous pouvez lire la valeur chart2.scales['y4'].max, qui contiendra bien la valeur arrondie affichée.

Dans un second temps, vous appliquez cette valeur comme max aux autres axes et terminez par un second update() pour rafraîchir l’affichage.

J'ai fait ce que vous m'avez dit : Insérer un update() avant le calcul du max. Cela ne fonctionne pas systématiquement ; notamment quand j'appelle plusieurs fois de suite toutes mes données, tous les calculs qui sont faits et tous les affichages qui en découlent.

Je vais donc m'en tenir à ma méthode "un peu bricolo", mais qui a l'avantage de fonctionner systématiquement.

Mais merci encore pour l'aide.

Cordialement.

Pierre.

OK - du moment que ça fonctionne:)