2013-08-08 6 views
16

Ich implementierte ein Multi-Serien-Liniendiagramm wie das von M. Bostock gegebene here und stieß auf ein kurioses Problem, das ich selbst nicht erklären kann. Wenn ich die lineare Interpolation wähle und meine Skalen und Achsen einstelle, ist alles korrekt und die Werte sind gut ausgerichtet. D3 - Unterschied zwischen Basis- und Linearinterpolation in SVG-Zeile

Aber wenn ich meine Interpolation zu Basis ändern, ohne meine Achse und Skalen zu ändern, sind die Werte zwischen den Linien und der Achse falsch.

Basis interpolation

Was hier geschieht? Mit der monotonen Einstellung kann ich fast den gleichen Effekt erzielen wie die Basisinterpolation, aber ohne das Synchronisationsproblem zwischen Linien und Achse. Trotzdem würde ich gerne verstehen, was passiert.

Antwort

26

Die Basisinterpolation implementiert eine beta spline, die Leute gerne als Interpolationsfunktion verwenden, weil sie extreme Spitzen glättet. Dies ist nützlich, wenn Sie etwas modellieren, von dem Sie erwarten, dass es reibungslos variiert, aber nur scharfe, selten abgetastete Daten aufweist. Eine Konsequenz daraus ist, dass die sich ergebende Linie nicht alle Datenpunkte verbindet und das Auftreten von Extremwerten verändert.

In Ihrem Fall sind die scharfen Spitzen die interessanten Merkmale, die Ausnahme zu dem normalerweise 0 Grundlinienwert. Wenn Sie eine Spline-Interpolation verwenden, glätten Sie diese Spitzenwerte.

Hier ist eine Spaß-Demo mit den verschiedenen Arten von Linie interpoations zu spielen: http://bl.ocks.org/mbostock/4342190

Sie können die Daten ziehen um, so dass sie eine scharfe Spitze wie das Ihre, auch klicken, um neue Punkte hinzufügen ähneln. Wechseln Sie dann zu einer Basisinterpolation und beobachten Sie, wie der Peak gemittelt wird.

Basis interpolation

+0

Völlig einverstanden mit dem, nicht wirklich, was ich aber gefragt. Ja, die lineare Interpolation ist für dieses Diagramm klarer, aber ich frage trotzdem, da ich später auf das gleiche Problem stoßen kann (tatsächlich habe ich bereits). –

+0

Oh, tut mir leid, ich dachte, die Frage war, warum deine Werte bei einer Basisinterpolation anders aussehen. Was fragst du? –

+0

Vielleicht war ich nicht klar :) Die zwei Bilder, die ich hochgeladen habe, wurden mit demselben Datensatz erstellt. Der maximale Wert in meinem Datensatz ist z. B. 100. In der linearen Interpolation zeigt die Achse dies korrekt an, da der Peak gemäß der Achse den y-Wert 100 hat. Aber dann wechsele ich zur Basisinterpolation und jetzt ist mein höchster Wert (entsprechend der Achse) um 70, während dies nicht der Fall ist. Es ist so, als hätte sich die Domäne meiner Skala geändert, außer dass es nicht so ist, weil ich nur den Interpolationsparameter geändert habe. Ich habe mich gefragt, warum das passiert ist und was ich konnte, um das zu verhindern. –