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 ?
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.
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.