2016-04-22 12 views
0

Ich gebe Daten als JSON an ein Highcharts Liniendiagramm weiter. Es gibt mehrere Linien (Kurven eher) und sie haben unterschiedliche Start- und Endpunkte - aber alle müssen zusammen aufgetragen werden. Als solche sieht meiner Reihe wie dieser, wo sich die „Daten“ ist so angeordnet, dass sie x sind, y-Paare:Daten mit Benutzereingabe dynamisch transformieren (Highcharts, JavaScript, Django)

series = [{'data': [[20, 400], [30, 450]], 'name': 'pc1', 'visible': False}, 
{'data': [[40, 525], [50, 600], [70, 680]], 'name': 'pc2', 'visible': False}, 
{'data': [[80, 700], [90, 980]], 'name': 'pc3', 'visible': False}, etc. 

Diese Daten Standardluftdichte berechnet wird, verwendet wird. Ich möchte den Benutzer in die Lage versetzen, eine andere Luftdichte eingeben zu können und die Daten mit einem Klick zur Verfügung zu haben (ich denke mit setData).

Grundsätzlich sind die Daten Windgeschwindigkeit vs RPM - die X-Werte sind Windgeschwindigkeit und Y sind eine entsprechende RPM. Durch das Ändern einer neuen Luftdichte erzeugt ein Benutzer einen Anpassungsfaktor, der dann verwendet wird, um die RPM an dem neuen Punkt zu finden. So ein kurzes Beispiel:

Standard Air Density (1.225 kg/m3): 
1 mph 100rpm 
2 mph 250rpm 
3 mph 500rpm 

Jetzt berechnen wir einen Anpassungsfaktor mit neuer Luftdichte (unter der Annahme von 1,5 kg/m3) mit der Formel adj_factor = (neue Luftdichte/1.225)^(1/3) -> diese gibt 1,07 zurück. Mit diesem Faktor kann ich die neue Drehzahl berechnen, indem ich nur den Windgeschwindigkeits-Anpassungsfaktor übernehme und die Daten interpoliere.

New Air Density (1.5 kg/m3) 
1 mph, (whatever RPM is @ 1.07mph (1mph*adj factor)) 
2 mph, (whatever RPM is @ 2.14mph (1mph*adj factor)) 
3 mph, (whatever RPM is @ 3.21mph (1mph*adj factor)) 

Das Problem, das ich in laufen lasse, ist, dass ich ein sehr unerfahren in JS bin und verstehe nicht ganz, wie dynamisch Daten erstellen, oder wie die alten Kurven Y-Werte mit den eingestellten Windgeschwindigkeiten verweisen.

Um dies zu tun, muss ich Daten interpolieren - was ich mit numpy getan habe.

Gibt es eine Möglichkeit, diese Umwandlung von der JavaScript-Seite anzuwenden? Meine Grafik ist ein Standard HighCharts Liniendiagramm der Form:

$(document).ready(function() { 
$(chart_id).highcharts({ 
chart: chart, 
title: title, 
credits: credits, 
xAxis: {}, 
yAxis: yAxis, 
legend: legend, 
series: series 

}); 

und in meinem Django Ansichten ich bin definieren alle Parameter:

chart = {"renderTo": chartID, "type": chart_type, "height": chart_height,} 
title = {"text": 'Power Curves'} 
yAxis = {"title": {"text": 'Output (RPM)'}} 
series = json.dumps(series_) 

Und die Serie der zuvor erwähnten Form. Der Graph funktioniert gut - es ist die dynamische Belastung der Daten und die Implementierung des Anpassungsfaktors, mit dem ich mich abmühen muss.

Dank

+0

Sie klicken, um die Werte in den Feldern ändern und könnten die aktuellen Daten aus der Serie mit [ 'Serie bekommen. Optionen '] (http://api.highcharts.com/highcharts#Series.options) und in zurückgegebenen Objektzugriffsdaten als 'options.data'. Ändern Sie dann die Daten und wenden Sie sie mit 'Series.setData()' auf Serien an. Wenn Sie damit Probleme haben, stellen Sie bitte eine Live-Demo zur Verfügung, z. in JSFiddle. –

Antwort

0

definieren 3 Arrays von Daten in JavaScript und auf, um die neuen Werte zu highcharts mit setData

Verwandte Themen