Mit der API fürchart.js
können Punkte der darin geladenen Datensätze bearbeitet werden, z. B.:
.update( )
Wenn Sie update () in Ihrer Diagramminstanz aufrufen, wird das Diagramm mit allen aktualisierten Werten erneut gerendert, sodass Sie den Wert mehrerer vorhandener Punkte bearbeiten und diese dann in einer animierten Renderschleife rendern können.
.addData( valuesArray, label )
Rufen Sie addData (valuesArray, label) in Ihrer Chart-Instanz auf und übergeben Sie ein Array von Werten für jedes Dataset sowie eine Beschriftung für diese Punkte.
.removeData( )
Durch Aufrufen von removeData () in Ihrer Diagramminstanz wird der erste Wert für alle Datensätze im Diagramm entfernt.
All dies ist großartig, aber ich kann nicht herausfinden, wie ein völlig neuer Datensatz geladen und der alte gelöscht wird. Die Dokumentation scheint dies nicht abzudecken.
quelle
Sie müssen zerstören:
Initialisieren Sie dann das Diagramm neu:
quelle
Mit Chart.js V2.0 können Sie Folgendes tun:
quelle
chart.config.data = newData
, habe ich diesen Fehler:TypeError: undefined is not an object (evaluating 'i.data.datasets.length')
Jemand hat das gleiche Problem?Es ist ein alter Thread, aber in der aktuellen Version (Stand: 1. Februar 2017) ist es einfach, auf chart.js dargestellte Datensätze zu ersetzen:
Angenommen, Ihre neuen x-Achsenwerte befinden sich im Array x und die y-Achsenwerte im Array y. Sie können den folgenden Code verwenden, um das Diagramm zu aktualisieren.
quelle
ChartJS 2.6 unterstützt das Ersetzen von Datenreferenzen (siehe Hinweis in der Dokumentation zur Aktualisierung (Konfiguration)). Wenn Sie also Ihr Diagramm haben, können Sie dies einfach tun:
Die Animation, die Sie durch das Hinzufügen von Punkten erhalten, wird nicht ausgeführt, aber vorhandene Punkte im Diagramm werden animiert.
quelle
Meine Lösung dafür ist ziemlich einfach. (VERSION 1.X)
Kein Flackern oder Probleme.
getDataSet
ist eine Funktion, um zu steuern, welchen Datensatz ich präsentieren mussquelle
Ich habe dies hier beantwortet. Siehe So löschen Sie ein Diagramm von einer Zeichenfläche, damit Hover-Ereignisse nicht ausgelöst werden können.
Aber hier ist die Lösung:
quelle
Löscht laut docs
clear()
die Leinwand. Betrachten Sie es als das Radiergummi-Werkzeug in Paint. Es hat nichts mit den aktuell in die Diagramminstanz geladenen Daten zu tun.Das Zerstören der Instanz und das Erstellen einer neuen Instanz ist verschwenderisch. Verwenden Sie stattdessen API-Methoden
removeData()
undaddData()
. Diese fügen der Diagramminstanz ein einzelnes Segment hinzu bzw. entfernen es. Wenn Sie also vollständig neue Daten laden möchten, schleifen Sie einfach ein Diagrammdatenarray und rufen Sie aufremoveData(index)
(Array-Indizes sollten den aktuellen Segmentindizes entsprechen). Verwenden Sie dannaddData(index)
, um es mit den neuen Daten zu füllen. Ich schlage vor, die beiden Methoden zum Schleifen der Daten zu verpacken, da sie einen einzelnen Segmentindex erwarten. Ich benutzeresetChart
undupdateChart
. Bevor Sie fortfahren, stellen Sie sicher, dass Sie dieChart.js
neueste Version und Dokumentation überprüfen . Möglicherweise haben sie neue Methoden zum vollständigen Ersetzen der Daten hinzugefügt .quelle
Ich bin auf dasselbe Problem gestoßen. Ich habe 6 Kreisdiagramme auf einer Seite, die alle gleichzeitig aktualisiert werden können. Ich verwende die folgende Funktion, um Diagrammdaten zurückzusetzen.
quelle
Ich habe versucht, eine neaumusische Lösung zu finden, aber später herausgefunden, dass das einzige Problem bei der Zerstörung der Umfang ist .
Wenn ich meine Diagrammvariable außerhalb des Funktionsumfangs verschiebe, funktioniert sie für mich.
quelle
Keine der oben genannten Antworten hat meiner speziellen Situation auf sehr saubere Weise mit minimalem Code geholfen. Ich musste alle Datensätze entfernen und dann eine Schleife ausführen, um mehrere Datensätze dynamisch hinzuzufügen. Dieser Ausschnitt ist also für diejenigen gedacht, die es bis zum Ende der Seite schaffen, ohne ihre Antwort zu finden :)
Hinweis: Stellen Sie sicher, dass Sie chart.update () aufrufen, sobald Sie alle neuen Daten in das Dataset-Objekt geladen haben. Hoffe das hilft jemandem
quelle
Sie müssen alte Daten bereinigen. Keine erneute Initialisierung erforderlich:
quelle
Wenn jemand nach einer Möglichkeit sucht, dies in React zu tun. Angenommen, Sie haben eine Wrapper-Komponente um das Diagramm:
(Dies setzt voraus, dass Sie v2 verwenden. Sie müssen es nicht verwenden
react-chartjs
. Dies verwendet das normalechart.js
Paket von npm.)Mit dieser
componentDidUpdate
Funktion können Sie Daten aktualisieren, hinzufügen oder entfernenthis.props.data
.quelle
Es ist nicht notwendig, das Diagramm zu zerstören. Versuchen Sie es damit
quelle
Bitte erfahren Sie, wie Chart.js (Version 2 hier) funktioniert, und tun Sie dies für jedes gewünschte Attribut:
1.Bitte nehmen Sie an, Sie haben ein Balkendiagramm wie das folgende in Ihrem HTML:
2.Bitte nehmen Sie an, Sie haben einen Javascript-Code, der Ihr Diagramm zum ersten Mal ausfüllt (z. B. wenn eine Seite geladen wird):
Angenommen, Sie möchten Ihren Datensatz vollständig aktualisieren. Es ist sehr einfach. Sehen Sie sich den obigen Code an und sehen Sie, wie der Pfad von Ihrer Diagrammvariablen zu den Daten ist. Folgen Sie dann dem folgenden Pfad:
chartInstance
var.data node
innerhalb derchartInstance
.datasets node
innerhalb derdata node
.(Hinweis: Wie Sie sehen können,
datasets node
ist das ein Array. Sie müssen also angeben, welches Element dieses Arrays Sie möchten. Hier haben wir nur ein Element in derdatasets node
., also verwenden wirdatasets[0]
datasets[0]
data node
innen in derdatasets[0]
.Mit diesen Schritten
chartInstance.data.datasets[0].data
können Sie neue Daten festlegen und das Diagramm aktualisieren:Hinweis: Wenn Sie dem obigen Algorithmus folgen, können Sie einfach jeden gewünschten Knoten erreichen .
quelle
Die einzige Lösung, die ich bisher für mich finden kann, besteht darin, das Diagramm von Grund auf neu zu initialisieren:
Dies scheint mir jedoch ein bisschen hokey. Gibt es eine bessere, standardisiertere Lösung?
quelle
Ich hatte auch viele Probleme damit. Ich habe Daten und Beschriftungen in separaten Arrays, dann initialisiere ich die Diagrammdaten neu. Ich habe die line.destroy () hinzugefügt; wie oben vorgeschlagen, was den Trick getan hat
quelle
Es gibt eine Möglichkeit, dies zu tun, ohne die Zeichenfläche zu löschen oder von vorne zu beginnen. Sie müssen jedoch die Erstellung des Diagramms so handhaben, dass die Daten beim Aktualisieren dasselbe Format haben.
Hier ist, wie ich es gemacht habe.
Grundsätzlich verschrotte ich die bei der Erstellung geladenen Daten und reformiere sie dann mit der Methode zum Hinzufügen von Daten. Dies bedeutet, dass ich dann auf alle Punkte zugreifen kann. Wann immer ich versucht habe, auf die Datenstruktur zuzugreifen, die erstellt wird von:
Befehl, ich kann nicht auf das zugreifen, was ich brauche. Dies bedeutet, dass Sie alle Datenpunkte auf die gleiche Weise ändern können, wie Sie sie erstellt haben, und auch update () aufrufen können, ohne sie vollständig von Grund auf neu zu animieren.
quelle
Diagramm JS 2.0
Setzen Sie einfach chart.data.labels = [];
Beispielsweise:
quelle