2012-12-31 13 views
60

Ich habe Schwierigkeiten, den korrekten Weg zur Aktualisierung eines Highcharts-Diagramms zu verstehen. Angenommen, ich habe ein Diagramm gerendert, und dann möchte ich es irgendwie aktualisieren. Zum Beispiel möchte ich vielleicht die Werte der Datenreihe ändern, oder ich möchte dataLabels aktivieren.Highcharts - redraw() vs. new Highcharts.chart

Im Moment ist der einzige Weg, wie ich das herausfinden kann, ist, die Diagrammoptionen zu ändern und new Highcharts.chart zu verwenden, um Highcharts neu zu zeichnen.

Ich frage mich jedoch, ob dies möglicherweise übertrieben ist und es möglich sein könnte, das Diagramm 'in situ' zu ändern, ohne mit new Highcharts.chart von vorne anfangen zu müssen. Ich merke, dass es eine redraw() Methode gibt, aber ich kann nicht scheinen, es zur Arbeit zu bringen.

Jede Hilfe wird sehr geschätzt.

Danke,

Robin

ist Beispielcode, wie und unten folgt, ist ein jsFiddle

$(document).ready(function() { 

chartOptions = { 
    chart: { 
     renderTo: 'container', 
     type: 'area', 
    }, 
    series: [{ 
     data: [1,2,3] 
    }] 
}; 

chart1 = new Highcharts.Chart(chartOptions); 


chartOptions.series[0].data= [10,5,2]; 
chart1 = new Highcharts.Chart(chartOptions); 

//The following seems to have no effect 
chart1.series[0].data = [2,4,4]; 
chart1.redraw(); 

});​ 

http://jsfiddle.net/sUXsu/18/

[Bearbeiten]:

Für jede zukünftige Zuschauer dieser Frage ist es nicht wert Es gibt keine Methode, dataLabels ein- und auszublenden. Im Folgenden wird gezeigt, wie es geht: http://jsfiddle.net/supertrue/tCF8Y/

+3

Der Link zu Ihrer Show/Hide dataLabels Beispiel seine HighCharts Quell-URL erforderlich aktualisiert (es wurde 404ing), und jQuery musste aktualisiert werden. Ich habe dies in http://jsfiddle.net/supertrue/tCF8Y/ – supertrue

Antwort

67

chart.series[0].setData(data,true);

Die setData Methode selbst wird

+1

Die Tooltip wird nicht aktualisiert, bei mouseover zeigt die Tooltip nur alte Daten an –

+0

Es dauert ungefähr 13-15 Sekunden, um für mehrere Serien zu aktualisieren –

+1

Für weitere Informationen: https://api.highcharts.com/class-reference/Highcharts. Series.html # setData –

7

Sie haben anrufen gesetzt und Funktionen auf Diagrammobjekt hinzufügen, vor dem Aufruf neu zu zeichnen.

chart.xAxis[0].setCategories([2,4,5,6,7], false); 

chart.addSeries({ 
    name: "acx", 
    data: [4,5,6,7,8] 
}, false); 

chart.redraw(); 
+0

getan. Es funktioniert für mich danke .. !! Es ist eine bessere Möglichkeit, um Diagramm zu aktualisieren, wenn Sie mit vielen Diagrammen mit vielen Daten auf einer einzelnen Seite arbeiten. Der Aufruf von Redraw für jede Serie kann Browser zum Absturz bringen. – Ritesh

+0

Ich arbeite an der Echtzeit-Anwendung und ich möchte Highmap aktualisieren, aber der Browser abstürzt, wenn die Aktualisierungshäufigkeit zunimmt. –

5
var newData = [1,2,3,4,5,6,7]; 
var chart = $('#chartjs').highcharts(); 
chart.series[0].setData(newData, true); 

Erklärung Bildneuaufbau Methode aufrufen:
Variable newData enthält Wert, der in Diagramm aktualisieren möchten. Variable chart ist ein Objekt eines Diagramms. setData ist eine von Highchart zur Aktualisierung von Daten bereitgestellte Methode.

Methode setData enthält zwei Parameter, im ersten Parameter müssen wir einen neuen Wert als Array übergeben und der zweite Parameter ist ein boolescher Wert. Wenn true dann aktualisiert sich Grafik und wenn false dann haben wir redraw() Methode verwenden, um Diagramm zu aktualisieren (dh chart.redraw();)

http://jsfiddle.net/NxEnH/8/