今天,我們將使用折線圖,柱形圖和散點圖可視化資產回報。下次我們將通過添加迴歸線和模擬結果來進行更復雜的工作。將可視化宏觀經濟數據,如BLS就業報表和GDP數據。 對於我們的數據,我們將使用以下5個ETF的5年月度回報。
+ SPY (S&P500 fund) + EFA (a non-US equities fund) + IJS (a small-cap value fund) + EEM (an emerging-mkts fund) + AGG (a bond fund)
需要以下包
library(tidyverse) library(timetk) library(kableExtra) library(highcharter)
完整的代碼在這裏:
symbols <- c("SPY","EFA", "IJS", "EEM","AGG") prices <- getSymbols(symbols, src = 'yahoo', from = "2013-01-01", to = "2017-12-31", auto.assign = TRUE, warnings = FALSE) %>% map(~Ad(get(.))) %>% reduce(merge) %>% `colnames<-`(symbols) prices_monthly <- to.monthly(prices, indexAt = "last", OHLC = FALSE) asset_returns_xts <- na.omit(Return.calculate(prices_monthly, method = "log")) asset_returns_xts <- asset_returns_xts * 100 asset_returns_long <- prices %>% to.monthly(indexAt = "last", OHLC = FALSE) %>% tk_tbl(preserve_index = TRUE, rename_index = "date") %>% gather(asset, returns, -date) %>% group_by(asset) %>% mutate(returns = (log(returns) - log(lag(returns))) *100 ) %>% na.omit()
我們將使用保存每月資產回報的兩個數據對象。第一個被稱爲asset_returns_xts。看看前幾行。
每個ETF月度回報都有一列,但請注意日期在無名欄中。實際上,日期根本不在列中,它被認爲是該矩陣的基於時間的索引。 比較一下asset_returns_long。
該對象有一個名爲的列date,一個名爲asset的列和一個名爲的列returns。它被認爲是一個長數據對象,因爲ETF是按行堆疊的,而asset_returns_xts被認爲是一個寬數據對象,因爲每個ETF都有自己的列並使對象更寬。asset_returns_long並asset_returns_xts保持完全相同的信息,但格式不同。我們將研究如何使用highcharter對兩者進行可視化,因爲它們都是金融界的流行數據格式。
讓我們從asset_returns_xtsHighcharts工具鏈的Highstock部分開始並使用它。要從R調用此功能,我們首先提供,然後提供要繪製的數據。請注意,我們指定type =“line”,但這不是必需的,因爲默認值是折線圖。 highchart(type = "stock")
highchart(type = "stock") %>% hc_add_series(asset_returns_xts$SPY, type = "line")
看一下圖表,注意它底部有一個導航器,右上角有一個日期範圍選擇器。我們沒有必要對它們進行編碼,默認情況下創建它們是我們最終用戶的一個非常好的功能。highchart(type = "stock") 如果我們喜歡不同的顏色,我們可以改變它。color = "green"
highchart(type = "stock") %>% hc_add_series(asset_returns_xts$SPY, type = "line", color = "green")
如果我們想要柱形圖而不是折線圖怎麼辦?除了我們指定之外,它是相同的代碼流。type = "column"
highchart(type = "stock") %>% hc_add_series(asset_returns_xts$SPY, type = "column")
將鼠標懸停在這兩個圖表上並注意工具提示如何自動從x軸拉出日期。 對於散點圖,我們使用相同的代碼流,更改爲,但我們也可以通過追加來添加EFA ETF的回報。我們可以爲所有5個ETF做這個,逐行添加它們,將所有5個放在同一個散點圖上。type = "scatter"hc_add_series(asset_returns_xts$EFA)
highchart(type = "stock") %>% hc_add_series(asset_returns_xts$SPY, type = "scatter") %>% hc_add_series(asset_returns_xts$EFA, type = "scatter")