Line-Chart glätten und partial stauchen

Hallo,
das Glätten funktioniert bereits, so:
float midf = Math.round((hochf + tieff) * 100f / 2f) / 100f;
dabei ist hochf und tieff jeweils der Hochpunkt und Tiefpunkt für einen Tag,
sollte man so glätten?

Danach sieht es ungefähr so aus: (das sind keine realen Daten):

Man sieht jetzt folgendes, in den ersten 4/5 ist es relativ langweilig und im zweiten 1/5 findet die Action statt,
kann ich jetzt die ersten 4/5 auf 1/2 stauchen und die zweiten 1/5 auf 1/2 strecken?
Wenn ja, wie?

Es soll (also) “etwas angenehmer zu lesen sein”…

Ein Klassiker zum Glätten ist https://en.wikipedia.org/wiki/Moving_average , aber das findet man ja recht schnell. Ansonsten ist die Beschreibung, WAS da WIE geglättet werden soll, (für mich) etwas unklar.

Hallo Marco,

ich hab jetzt einen ganz simplen Ansatz gewählt - und mit “echten” Daten sieht es jetzt so:

Bildschirmfotos:
[spoiler]“Original”:

erster Teil um 0.5 gestaucht:

erster Teil um 0.75 gestaucht:

erster Teil um 0.8 gestaucht:

erster Teil um 0.8 gestaucht und ein “ausreißer” weg:
[/spoiler]

Der Chartverlauf ist viel besser zu erkennen, allerdings stimmt die Zeitachse (x-Achse) nicht mehr…

Ein Klassiker zum Glätten ist https://en.wikipedia.org/wiki/Moving_average ,

danke für den Tipp, etwas ähnliches hatte ich ja schon mit Tageshoch und Tagestief gemacht.

Ansonsten ist die Beschreibung, WAS da WIE geglättet werden soll,

Der erste Teil ist, wie man sieht, langweilig, weil nicht so viel passiert. Ich möchte den ersten Teil aber trotzdem im Chart behalten. Weiter kann ich denn Chart nicht 3200 Pixel lang machen, weil das irgenwie nicht schaut. Deswegen muss ich den ersten Teil irgenwie verkleinern oder “stauchen”. Versteht man, was ich meine?

Quasi soll ein Chart alle Informationen beinhalten, aber der Fokus auf dem zweiten Teil liegen. :verzweifel:

Ich denke nicht, dass eine partiell gestauchte Achse die Aussagekraft des Graphen erhöht. Wenn du die “Betrachtungshöhe” auf den Graph vergrößern möchtest, berücksichtige weniger Datenpunkte. Dann wirst du die Ausschläge gegen Ende natürlich nicht so fein sehen. Aber entweder die einzelnen Intervalle sind wichtig, dann sind sie auch im “langweiligen” Teil wichtig. Oder es geht nur um die grobe Tendenz, dann kann auch der hintere Teil weniger fein aufgelöst sein.

Also eine partiell gestauchte Achse verwirrt den Betrachter mehr, als es nützt? Dann nehme ich das “Feature” wieder raus - und der Anwender muss entscheiden, ob er den lang-, mittel- oder kurzfristigen Verlauf sehen möchte - beides in eins, funktioniert nicht?

Dann wären auch schon alle Fragen geklärt (glätten, stauchen). Das Thema kann man schließen/verschieben/löschen(/[erledigt]-setzen).

Ich würde es auf jeden Fall so empfinden. Man bereitet Daten ja in einem Diagramm auf um sie anschaulich und schnell erfassbar zu machen. Dass die Skala auf der X-Achse nicht gleichmäßig ist, sondern auf der linken Seite feiner als auf der rechten, damit rechnet niemand. Das fällt erst auf, wenn man sich die Werte auf den Achsen alle anschaut oder darauf hingewiesen wird.

Moin,
stauchen, vielleicht interessiert es den ein(en) oder anderen:

        for (int i = 0; i <= 21; i++) {
            Elem get = list.get(i);
            get.datum = new Date(get.datum.getTime() / 5 + 4 * time / 5);
        }```
Höö, wieso Index 22 und Index 21?: Bis dahin soll gestaucht werden, und was ist x/5 + (4*x)/5 ? Genau, das ist x...
Deswegen nur bis Index 21.

Ist meine Rechnung richtig?

2. "Simple moving average" : @Marco13  : Kannst du diesen bitte kurz erklären? Das wäre Super. :)
[IMG]https://wikimedia.org/api/rest_v1/media/math/render/svg/3d47f20e3047f6e87f1d2b61ae86b25925c4bf23[/IMG]

Wenn ich es richtig sehe, wird der Durchschnitt berechnet, kann ich das einfach für einen oder zwei Tage machen?

Dankesehr, Grüße

21, 22, /5 WTF?
Ja, es wird einfach nur der Durchschnitt berechnet. Aber was das mit dem “Stauchen” soll, ist mir nicht klar. Wenn x-Werte wegfallen sollen, finde ich das erstmal auch fraglich.
Wenn man diese Fraglichkeit ignoriert, könnte man mit https://optimization.mccormick.northwestern.edu/index.php/Piecewise_linear_approximation vielleicht was machen, aber … das ist erstmal nur “name dropping” und rumgerate…

Ich hab es hinbekommen, und es sieht echt knorke aus:

  1. partiell gestaucht,

  2. Ausreißer weg,

  3. geglättet,

  4. Ergebnis:
    [spoiler][/spoiler]

Daten entsprechen jetzt auch nicht mehr der Realität - oder nur bedingt (Daten, ~Realität, ist das ein Widerspruch?)

Wenn man noch weiter “glättet”, hätte man einfach nur eine Linie.

“Wenn x-Werte wegfallen sollen, finde ich das erstmal auch fraglich.” - joa, aber beim Durchschnitt bilden (<- ist bestimmt falsch geschrieben^^) fallen nun mal x-Werte weg, richtig?

“aber … das ist erstmal nur “name dropping” und rumgerate…” - kein Problem, hilft ja auch.^^

Ich bin dann mal Mittagessen…

Edit 2: (langweiliger Code wieder weg)

Entweder waren deine vorherigen Charts falsch, oder die Werte passen nicht mehr zu deiner X-Achse. Wenn du trotz allem unbedingt teilweise die X-Achse stauchen möchtest, müssen die Labels an der auch geändert werden, hier sind die Abstände der Werte gerade noch gleichmäßig.

Hallo,

schönes Wetter heute, keine Wolken auf dem Radar zu sehen,

also das Thema ist ja immer noch on-top,

also ich bin ein Line-Chart noob,

also die x-Werte entsprechen jetzt dem Durchschnitt für einen Tag (nach dem SMA), und sind deswegen nicht mehr „realistisch“,

also ich hab versucht, eine Linie durch zu zeichnen, anhand derer man erkennen soll, ob ein Ausschlag über oder unter dem Durchschnitt ist:

Final chart mit Linie(n):
[spoiler][/spoiler]

wie zu erkennen ist, verläuft der Chart komplett oberhalb der Linie - das ist natürlich nicht so schön,

wie ist der Anfangs-y-wert und der Endes-y-wert der Linie (wie gesagt, chart noob)… Vektorrechnung?

Dankesehr für Antworten

Anmerkung: Auch wenn es so scheint, als wären die zwei Charts parallel, nur versetzt, sind sie tatsächlich unterschiedlich :wink: (Beispiel: Chart 1 bei 90, Chart 2 bei 100 und Chart 1 bei 100, Chart 2 bei 111,11111111111111111111111111111)

Nimmt man üblicherweise Lineare Regression

Im Artikel wird zwar eine Punktwolke verwendet, ein Linechart ist aber auch nur eine Punktwolke, bei der die einzelnen Punkte miteinander verbunden sind.

Ist übrigens einfacher zu berechnen, wie es im Wikipedia-Artikel aussieht.