Plot Grafik Interaktif

By | August 24, 2022
Print Friendly, PDF & Email
814 Views

Membuat grafik sebenarnya urusan paling mudah di R/RStudio, namun yang interaktif seperti melakukan zooming sepertinya menggunakan package ggplot saja tidak cukup. Misalkan kita menemukan kasus untuk ploting data berbasis time series yang sangat panjang sekali, sehingga keterangan x label tidak begitu jelas bahkan tidak mungkin dijejalkan begitu saja.

Plotly merupakan sebuah package grafik yang interaktif di R/RStudio. Saya lebih suka menggunakan package ini mengingat data yang saya sajikan begitu banyak berbasis time series. Saya akan ambil contoh untuk ploting data pada dataset berikut https://github.com/mulkan/data-stock/tree/main/dataset

Setelah kalian download semua file pada folder dataset diatas, kita akan merge file CSV tersebut menjadi satu https://softscients.com/2022/08/03/merge-file-csv-dengan-cepat/. Berikut contoh membuat Plot Grafik Interaktif  OHLC saham

library(plotly)
library(dplyr)
library(lubridate)
library(data.table)

multmerge <- function(path){
    filenames=list.files(path=path, full.names=TRUE)
    rbindlist(lapply(filenames, fread))
}

subtitle<-function(text){
    a = list(text = text,
             #font = f,
             xref = "paper",
             yref = "paper",
             yanchor = "top",
             xanchor = "left",
             align = "left",
             x = 0.5,
             y = 1,
             showarrow = FALSE)
    return(a)
}


path <- paste(getwd(),"dataset",sep='/')
stock <- multmerge(path)


emiten = "BBRI"

stock.emiten = stock %>% filter(StockCode==emiten) %>%
    filter(Date>=lubridate::as_date("2022/05/01"))

fig.price = plot_ly(stock.emiten,
                    x = ~Date, 
                    type="candlestick",
                    open = ~OpenPrice, 
                    close = ~Close,
                    high = ~High, 
                    low = ~Low) %>%
    layout(annotations = subtitle(paste("emiten : ",emiten,sep="")))
fig.price

 

Fitur shareX = TRUE

Yup fitur yang paling saya suka pada plotly yaitu shareX = TRUE yang artinya jika kita menumpuk grafik yang sumbu X nya sama, maka otomatis akan ter scale. Sekarang kita akan menghitung RSI(9) dan membuat stacking grafik. Jadi ketika kita zoom area tertentu, maka grafik yang lainnya ikut menyesuaikan.

library(tidyquant)
stock.emiten = stock.emiten %>% mutate(RSI = RSI(Close,n=14))

fig.rsi = plot_ly(stock.emiten, x  = ~Date, y = ~RSI, type = 'scatter', mode = 'lines') %>%
    layout(annotations = subtitle("RSI 14"))


p = subplot(fig.price,fig.rsi,
            titleX = TRUE, 
            titleY = TRUE, 
            nrows = 2,
            shareX = TRUE ) %>%
    layout(showlegend = FALSE,title= paste("emiten: ",emiten,sep=""))
p

Plot Grafik Interaktif yang melibatkan time series yang sangat panjang, tentu akan sangat terbantu dengan package plotly diatas, ya miri-mirip fitur pada https://www.tradingview.com

See also  Akhirnya Torch versi R telah tersedia - Framework Machine Learning

Plotly dan RShiny

Nah lebih menyenangkan lagi kalau 2 package tersebut digabungkan jadi satu sehingga ada interaksi oleh user. Plot Grafik Interaktif seperti memilih date dan jumlah periode yang akan digunakan ataupun memilih emiten yang akan ditampilkan.

Selain hal tersebut, juga sumbu numeric nya menyesuaikan, misalkan saja kalau sudah ribuan akan disingkat K, mencapai jutaan akan disingkat M dan seterusnya sehingga nol nya tidak banyak. Bagaimana menurut kalian Plot Grafik Interaktif??