Jak narysować wykres wartości od czasu... z pociętym czasem?

0

Posiadam zbiór danych, są to próbki z wartością pieniężną i znacznikiem czasu. Narysowanie wykresu tego to wiadomo - banał (i to już mam, wraz z zoomem na szczypnięcia i przesuwaniem palcem). Problem pojawia się jednak, ponieważ z osi X (czyli czasu) muszę wyciąć pewne okresy, a dokładniej wszystko poza 10:30, a 17:00 od poniedziałku do piątku. Brak liniowości w osi X rozwala mi cały układ i nie wiem jak to ugryźć.

Przy okazji chciałbym też dodać coś w rodzaju redukcji próbek, ponieważ może być ich sporo (nawet np. 5 tys), a szerokość ekraniku w iPhonach, nawet tych największych nie pomieści tyle punktów, nie mówiąc o tym, że ma to wpływ także na wydajność rysowania. Nie wiem też jak je uśredniać, żeby zachować charakterystyczne punkty wykresu (np. wśród 20 punktów jest ostry spadek w dół to nie mogę go "wygładzić").

Zakładam temat w innych językach, bo docelowo to ma być Objective-C.

0

ja bym to zrobił tak , niezależnie od języka w którym piszę.

tworzę dwie tablice y[t] i x[t]. gdzie y[t] to twoje wartości pieniężne a x[t] to znacznik czasowy. Tablice są tworzone w momencie tuż przed odświeżeniem widoku.

Czyli np będzie tak
y[t]= [10 10 10 10 10 15 15 15 20 20 17 17 ]
x[t]= [10:30pn 12pn 14pn 17pn 10:30wt 12wt 14wt 17wt] i tak dalej. Wtedy już tylko tworzysz klasę rysującą która na osi odciętych (OX) wypisze wartości z tablicy x[y];

Jeżeli chodzi o minima lokalne to żeby stwierdzić nagłe szybkie spadki lub wzrosty i żeby ich nie zagubić proponuję sprawdzać różniczkę. Jeżeli tangens kąta nachylenia nie zbliża się do 1 bądź do -1 to możesz być spokojny o minima. Jeżeli coś takiego się pojawia to sprawdzić czy z następną różniczką nie tworzą bardzo ostrego kąta i będziesz miał info o puncie przegięcia i będziesz mógł je odpowiednio potraktować( np. zwiększyć jego wagę przy uśrednieniu albo cuś).

Mam nadzieję że pomogłem

pzdr
Wojtek

0

@wojciechmaciejewski niestety to nie takie łatwe :)

Jeżeli kogoś to interesuje to sprawę rozwiązałem tak, że przesuwam wartość czasu dla punktów o wycięty czas (który się kumuluje im dalej na osi). Czyli punkty z czasem od 10:30 do 17 zostają ok, kolejne dane aż do 10:30 dnia następnego odrzucam, a potem przesuwam czas tego punktu (i każdego kolejnego) o 17,5h do przodu, punkty z kolejnego dnia są przesunięte o 35h, etc. W efekcie otrzymuję ładną liniową oś czasu, którą bardzo łatwo jest narysować, zoomować, etc. Przed narysowaniem skali dodaję ten odjęty czas i wszystko gra :).

0

Zależnie od stopnia zoom-a powinieneś pokazywać dane z różną dokładnością.
Jeśli user widzi cały miesiąc to lepiej jak by widział kurs dnia a nie kursy co godzinę/minutę.
Jeśli chodzi o przerwy w strumieniu danych można zrobić coś co się nazywa "przełamaniem osi" np
user image

1 użytkowników online, w tym zalogowanych: 0, gości: 1