R: dynamicznie aktualizuj wykres [zamknięty]

9

To jest pytanie dotyczące wizualizacji danych. Mam bazę danych, która zawiera niektóre dane, które są stale aktualizowane (aktualizacja online). Jaki jest najlepszy sposób w R na aktualizowanie wykresu co powiedzmy 5 lub 10 sekund. (bez ponownego spisku wszystko jest możliwe)?

fRed

RockScience
źródło

Odpowiedzi:

7

Zakładając, że chcesz zaktualizować R windows()lub x11()wykres, możesz używać funkcji takich jak points()i, lines()aby dodawać nowe punkty lub przedłużać linie na wykresie bez przerysowywania; zauważ jednak, że nie zmieni to zakresu osi, aby uwzględnić punkty, które mogą zniknąć z pola widzenia. Zasadniczo dobrym pomysłem jest natychmiastowe sporządzenie wykresu - na przykład poprzez przeniesienie wysiłku obliczeniowego na wykonanie mniejszej reprezentacji środkowej, którą można narysować szybko, np. Mapę gęstości zamiast dużej liczby punktów lub zmniejszenie rozdzielczości wykresów liniowych ( może to być skomplikowane).

Aby wstrzymać sesję R przez określony czas bez zajętego oczekiwania, użyj Sys.sleep().


źródło
(+1) Zapomniałem Sys.sleep()funkcji. Myślę żex- i y- zakres osi powinien być ustalony wcześniej, nie?
chl
@chl, tak x i yzakresy osi należy wcześniej ustalić.
mpiktas
1
@mpiktas Lub po prostu zainicjuj fabułę za pomocą jednego wywołania plot(), być może z tym, 0,0,type="n"że nie ma jeszcze nic do wykreślenia ... Rzeczywiście jest to o wiele łatwiejsze niż pisanie plot.new()i dodawanie ręcznie takich rzeczy jak osie lub etykiety.
Rzeczywiście wydaje się to najprostsze ... ale szkoda, że ​​osie nie są aktualizowane. Ponieważ chcę aktualizować online szereg czasowy i wiem, z jaką prędkością porusza się oś x, wydaje mi się, że mogę powtórzyć wszystko co n aktualizacji.
RockScience
8

W przypadku wizualizacji offline możesz generować pliki PNG i konwertować je na animowane pliki GIF za pomocą ImageMagick . Użyłem go do demonstracji (przerysowałem jednak wszystkie dane):

source(url("http://aliquote.org/pub/spin_plot.R"))
dd <- replicate(3, rnorm(100))
spin.plot(dd)

Generuje to kilka plików PNG z prefiksem fig. Następnie na powłoce un * x

convert -delay 20 -loop 0 fig*.png sequence.gif

daje tę animację (inspirowaną nowoczesnymi metodami biostatystycznymi stosowanymi przez S-Plus , S. Selvin, 1998):

alternatywny tekst

Inną opcją, która wygląda o wiele bardziej obiecująco, jest poleganie na pakiecie animacji . Istnieje przykład z automatyczną regresją ruchomego okna, która powinna pozwolić Ci zacząć.

chl
źródło