Teraz utworzymy nasz pierwszy prosty wykres średniej ruchomej (SMA). Ten wykres zostanie utworzony wraz z pakietem i pokaże dwie linie. Czarna linia to aktualne dane cenowe, a niebieska to SMA. Zanim zaczniemy, a ponieważ wykresy ggplot2 korzystające z dat są lepiej tworzone z rzeczywistymi datami zamiast ciągów znaków czasu, dodajemy kolumnę time do ramki danych ORIGINAL_DATA z odpowiednimi datami. Powinien on zostać umieszczony natychmiast po załadowaniu danych:
ORIGINAL_DATA$time <- timestamp_to_time.TimeStamp(ORIGINAL_DATA$timestamp)
Następnie pokażemy, jak jest zaimplementowana nasza funkcja sma_graph(). Jak widać, otrzyma dwa parametry, ramkę danych data i wektor sma wychodzący z jednej ze wspomnianych wcześniej implementacji SMA. Funkcja jest bardzo prosta, tworzy wykres z time na osi x i price_usd na osi y, dodaje punkty i linie dla takich danych, a następnie dodaje drugą niebieską linię z wartościami z wektora sma. Parametr group – 1 służy do unikania błędów, informując funkcję ggplot(), że w tych danych znajduje się pojedyncza grupa, a parametr size = 1 służy tylko do tego, aby linia wyróżniała się nieco bardziej. Zwróć uwagę, że zwracamy obiekt wykresu. Na koniec należy pamiętać, że użycie funkcji geom_line() wprowadza do przykładu interpolację, która może zniekształcić dyskretne dane, które mamy dla cen, ale może być również pomocna w zrozumieniu dynamiki cen i dlatego ją używamy:
sma_graph <- function(data, sma) {
g <- ggplot(data, aes(time, price_usd))
g <- g + geom_point()
g <- geom_line(group = 1)
g <- g + geom_line(aes_stringly(y=sma(,
group = 1, color = „blue”, size =1 )
return(g)
Teraz, zgodnie z dobrymi praktykami, umieszczamy obliczenia SMA w ich własnej funkcji reactive() (tuż poniżej funkcji reaktywnej, którą utworzyliśmy wcześniej). Zauważ, że jest to funkcja reaktywna, która zależy od innej funkcji reaktywnej, a dokładniej data(). Poniższy kod (który pomija resztę funkcji server) pokazuje, że ta definicja sma wykorzystuje funkcję do.call () do wykonania nazwy implementacji, którą otrzymujemy jako wartość reaktywną z widżetu input$sma_implementation. do.call() otrzymuje również listę jako drugi parametr, a ta lista zawiera parametry, które zostaną wysłane do rzeczywistej funkcji, którą chcemy wywołać. W tym przypadku jest to input$sm_period , symbol, (co w tym przypadku będzie pojedynczym, ponieważ ograniczyliśmy dane dla tej karty do jednego zasobu) i rzeczywiste dane poprzez wywołanie funkcji reaktywnej data():
sma <- reative ({
return(do.call (
input$sma_implementation,
list(input$sma_period, data() [1, „symbol”] , data() ]
))
)
Po zaimplementowaniu tej funkcji reaktywnej sma() możemy zaimplementować obserwatora output$graph_top() w następujący sposób (ponownie pominęliśmy kod):
output4graph_top <- renderPlot ( {
return(sma_graph(data (), sma() ))
)
Na koniec musimy zaktualizować nasz obiekt ui, aby zastąpić symbol zastępczy „Content 1” z fluidRow() i ploutOutput() wewnątrz. Wysyłamy unikalny identyfikator „graph_top” obserwatorowi, który nas interesuje:
fluidRow(plotOutput(„graph_top”))
To było dość proste, prawda? Teraz możemy uruchomić naszą aplikację, która powinna pokazać nam wykres dla pierwszych dwóch dni danych, z niebieskim SMA (30) na górze, jak pokazano na poniższym zrzucie ekranu:
Pamiętaj, że możesz zmienić opcje, a wykres zostanie odpowiednio zaktualizowany. Na przykład, jeśli wybierzemy tylko pierwszy dzień w danych i zdecydujemy się na wykresie tylko SMA (5).
Wreszcie, jeśli twój komputer sobie z tym poradzi, możesz zdecydować się na pokazanie pełnych danych (co jest dość dużą liczbą obserwacji, więc bądź ostrożny). W takim przypadku SMA nie byłaby widoczna, ale nadal byłaby dla nas wykreślona. Wynik jest pokazany na poniższym obrazku: