Ich habe ein Balkendiagramm auf einer Seite, die Daten angezeigt hat, die dynamisch aktualisiert wird. Das Problem, das ich habe, ist, dass ich den Typ der y-Achse basierend auf den Daten ändern muss, die angezeigt werden. Ich brauche es eine lineare Skala, wenn die Daten einen Bereich von weniger als 100 (z. B. 0-99) und logarithmische, wenn es größer ist (z. B. 0-1000).dynamisch aktualisieren Sie die Skalartyp Diagrammgrafik
Ich kann berechnen, ob ich eine logarithmische Skala oder nicht gut, aber wenn es um die Änderung der Skala geht, bin ich ratlos. Ich habe versucht, das options
Objekt des Diagramms zu ändern und ruft update()
:
myChart.options/scales.yAxes.map(function (axis) { axis.type = 'logarithmic' });
myChart.update();
und auch versucht, das Ausmaß ändert sich direkt an:
Object.keys(mychart.scales).forEach((function (axisName) {
var axis = myChart.scales[axisName];
if (axis && axis.id.startsWith('y')) {
axis.options.type = 'logarithmic'
}
}));
myChart.update();
dann habe ich versucht, den beforeBuildTicks
Rückruf verwenden, zu denken, dass die Art zu ändern während der Aktualisierung der Daten und Neuzeichnen des Diagramms möglicherweise zu spät oder nur zur falschen Zeit:
beforeBuildTicks: function (scale) {
if (scale.chart) {
console.log('logarithmic');
scale.options.type = 'logarithmic';
}
}
alle diese approac hes ändert das Diagrammobjekt, aber die Anzeige ist nicht betroffen.
Gibt es eine Möglichkeit, den Skalierungstyp eines Diagramms Balkendiagramm dynamisch zu ändern, ohne das gesamte Diagramm zu zerstören und neu zu erstellen?
dies scheint nicht wirklich auf die Waage zu einem logarithmischen zu ändern, wird die Differenz zwischen dem tick auf dem yscale, wenn die ‚Änderung‘ wird, den Maßstab zu setzen, wie logarithmisch das gleiche zwischen allen Zecken wie die räumliche Trennung, die definitionsgemäß eine lineare Skala ist. Ich habe endlich eine Lösung gefunden (die ich dir für den Hinweis auf 'scaleMerge' danken muss) siehe meine Antwort – MikeW