Intro:
Ich arbeite mit einem riesigen Datensatz, den ich im Browser zeichnen muss, und da es bis zu 1 Million Punkte geben kann, war meine Idee, verschiedene Darstellungen für verschiedene Zoomstufen zu erstellen
Nehmen wir an, ich habe 100.000 Punkte, ich würde zwei mal zwei mitteln, bis ich 50.000 bekomme, dann würde ich das wiederholen, bis ich unter 500 Punkte komme (meine willkürliche Schwelle).
Auf der am meisten herausgezoomten Ebene würde ich alle 500 Punkte oder einen Teil davon zeichnen, abhängig von der Diagrammgröße, und beim Vergrößern würde ich zur nächsten Zoomstufe wechseln (und Daten streamen, wenn der Benutzer die Auswahl l / r zieht ), und wenn der Benutzer feinkörnige Details sehen möchte, kann er auf die Zoomstufe 0 zoomen und alle feinen Details sehen.
Ich habe diesen Prototyp tatsächlich erstellt und er funktioniert recht gut, abgesehen von einer Sache: Nebeneffekt davon ist, wie Sie sich vorstellen können, dass Spitzen in diesen Iterationen der Mittelwertbildung verloren gehen.
Ich habe einige Nachforschungen über den Douglas-Peucker-Algorithmus angestellt und herausgefunden, wie er Peaks beibehalten kann. Ich habe einige Tests durchgeführt und er funktioniert recht gut, aber das Problem dabei ist, dass er auf eine Reihe von Daten (y-Werte) stößt [1 , 1,1,1,5,6,1,1,1,1,1,1] es wird das zu etwas wie [1,6,1,1] glätten, was für mich nicht funktioniert, da ich muss Halten Sie das Verhältnis der Zoomstufen wie folgt
n (Länge der Originaldaten)> n / 2> n / 4> n / 8> .....
Ich habe einige Artikel über Linienglättung gelesen, aber alle Algorithmen, die ich gefunden habe, akzeptieren Entfernungsschwellenwerte, die sie zum Glätten als Parameter verwenden, und keiner von ihnen kann die Anzahl der gewünschten Ausgabeelemente akzeptieren, und auch, da ihr Ziel darin besteht, zu glätten In der Zeile transformieren sie eine Sequenz wie diese (y-Werte) [1,1,1,1,1,1,1,1,1,1] in [1,1].
Also endlich meine Frage:
Gibt es einen Algorithmus, der:
- Anstelle der üblichen Abstandsschwelle wird die gewünschte Anzahl von Ausgabeelementen akzeptiert
- versucht Spitzen zu erhalten (wie Douglas-Peucker)
- glättet Daten gleichmäßig, selbst wenn es (y-Werte) [1,1,1,1,1,1] erhält und ich sage, ich möchte 3 Ausgänge, Ereignis, wenn es theoretisch korrekt ist, als [1,1] zu glätten. Ich müsste stattdessen [1,1,1] bekommen
Bitte lassen Sie sich auch nicht durch fehlende Informationen zur X-Achse verwirren, da dies irrelevant ist, da alle Daten in Schritten von 1 von 1 bis n gemessen werden und daher keine N / A-Werte oder Leerstellen oder Werte wie [1.3 1,4,3]
x ist immer [1,2,3 .... n]