2013-08-08 10 views
16

Zaimplementowałem wielowątkowy wykres liniowy, taki jak ten podany here przez M. Bostocka i wpadł w ciekawy problem, którego nie potrafię sobie wytłumaczyć. Kiedy wybieram interpolację liniową i ustawiam swoją skalę i oś wszystko jest poprawne, a wartości są dobrze wyrównane. Linear interpolationD3 - Różnica między interpolacją podstawową a liniową w linii SVG

Ale kiedy zmieniam moją interpolację na bazę, bez zmiany mojej osi i skali, wartości między liniami i osią są nieprawidłowe.

Basis interpolation

Co się tu dzieje? Przy ustawieniu monotonnym mogę osiągnąć taki sam efekt, jak interpolacja bazowa, ale bez problemu z synchronizacją między liniami i osią. Wciąż chciałbym zrozumieć, co się dzieje.

Odpowiedz

26

Podstawową interpolacją jest implementacja beta spline, którą ludzie lubią używać jako funkcji interpolacji właśnie dlatego, że wygładza ona ekstremalne szczyty. Jest to przydatne, gdy modelujesz coś, co może się płynnie różnić, ale masz tylko ostre, rzadko pobierane dane. Konsekwencją tego jest to, że linia wynikowa nie połączy wszystkich punktów danych, zmieniając wygląd ekstremalnych wartości.

W twoim przypadku ostre piki są interesującymi cechami, wyjątkiem jest zazwyczaj 0 wartości bazowej. Gdy używasz interpolacji splajnu, wygładzasz te pikty.

Oto zabawy demo grać z różnymi rodzajami interpoations liniowych: http://bl.ocks.org/mbostock/4342190

można przeciągać dane dookoła więc przypominać ostry pik jak twoje, nawet kliknij, aby dodać nowe punkty. Następnie przełącz się na interpolację podstawową i obserwuj, jak szczyt się uśrednia.

Basis interpolation

+0

Całkowicie się z tym zgadzam, a nie tak naprawdę, o co prosiłem. Tak, interpolacja liniowa jest wyraźniejsza dla tego wykresu, ale pytam, tak czy inaczej, ponieważ mogę napotkać ten sam problem później (w rzeczywistości już mam). –

+0

Och, przepraszam, myślałem, że pytanie brzmi: dlaczego twoje wartości wyglądają inaczej z podstawową interpolacją. O co pytasz? –

+0

Może nie było jasne :) Dwa zdjęcia, które przesłałem, zostały wygenerowane przy użyciu tego samego zestawu danych. Na przykład maksymalna wartość w moim zbiorze danych wynosi 100. W interpolacji liniowej oś pokazuje, że poprawnie, ponieważ pik ma wartość y 100 zgodnie z osią. Ale potem zmieniam się na interpolację podstawową, a teraz moja najwyższa wartość (zgodnie z osią) wynosi około 70, podczas gdy tak nie jest. Wygląda to tak, jakby zmieniła się moja skala, z wyjątkiem tego, że wszystko, co zrobiłem, zmieniło parametr interpolacji. Zastanawiałem się, dlaczego tak się stało i co mogę, aby temu zapobiec. –