2016年1月8日

Outline

  • 範例資料介紹
  • R時間變數調整
  • Dygraph 基本繪圖
  • 各種參數統整
    • DyOptions()
    • DyAxis ()
    • DyEvent ()
    • DyLimit ()
    • DyRangeSelector ()
    • DyLegend ()
  • 尺規問題
  • RColorBrewer
  • 多條線的變化
  • 預測圖製作

範例資料介紹

  • 匯率資料
  • 間接報價法資料

R時間變數調整(1)

> as.Date("1992/3/11","%Y/%m/%d")
[1] "1992-03-11"
> as.Date("1992.3.1","%Y.%m.%d")
[1] "1992-03-01"
> as.Date("3.11.92","%m.%d.%y")
[1] "1992-03-11"

R時間變數調整(2)

  • 將資料轉換為時間格式
> library(zoo)
> data.ts<-zoo(data[,-1],as.Date(as.character(data[,"Date"]),"%Y/%m/%d"))
> data.ts[1:10,]
           USDEUR USDGBP USDJPY
2014-01-01   0.73   0.60    105
2014-01-02   0.73   0.61    105
2014-01-03   0.74   0.61    105
2014-01-06   0.73   0.61    104
2014-01-07   0.73   0.61    105
2014-01-08   0.74   0.61    105
2014-01-09   0.73   0.61    105
2014-01-10   0.73   0.61    104
2014-01-13   0.73   0.61    103
2014-01-14   0.73   0.61    104

Dygraph 基本繪圖(1)

  • 單一走勢 (日圓為例)
> J.ts<-data.frame('USDJPY'=data.ts[,3])
> q <- dygraph(J.ts ,main = "日圓匯率走勢") %>%
+         dySeries("USDJPY", label = "日圓走勢", col='deepskyblue')
> q

Dygraph 基本繪圖(2)

  • 多條走勢 (英鎊、歐元為例)
> ## 只看歐元跟英鎊,先移除日圓
> EP<-data.ts[,-3]
> dygraph(EP ,main = "匯率走勢") %>%
+    dySeries("USDEUR", label = "歐元走勢") %>%
+    dySeries("USDGBP", label = "英鎊走勢")

Color palette

各種參數統整

DyOptions() - (1)

  • 有需要才要調整,通常維持內建就好。
參數 解釋
fillGraph = TRUE line下面要不要填滿
fillAlpha = 0.2 填滿顏色的深淺調整
drawGrid = TRUE 要不要背景的網格
axisLineWidth = 0.5 x,y 軸的粗細程度
axisLineColor = "gold" x,y 軸的顏色
gridLineColor = "gold" 網格的顏色
drawPoints = TRUE 要不要加點,點的大小
pointSize = 0.5 點大小設定

DyOptions() - (2)

Example

> #q: 日元走勢圖
> q %>% dyOptions( axisLineWidth = 1.5, axisLineColor="orange", 
+                  gridLineColor="indianred" , fillGraph = T,fillAlpha = 0.2,
+                  drawGrid  = TRUE,drawPoints=TRUE, pointSize = 1 ) ->q1
> q1

DyAxis ()

  • dyAxis("x", label = " x-軸名稱 ", drawGrid = F) 要不要畫垂直網格
  • dyAxis("y", label = " y-軸名稱 ", drawGrid = T) 要不要畫水平網格
> # q1 : 日元走勢圖
>   q1 %>% dyAxis("x", label = " 日期 ",   drawGrid = T) %>% 
+          dyAxis("y", label = " USDJPY ", drawGrid = F) 

DyEvent ()

  • 標記某時間發生某事件
  • labelLoc top or bottom
> # q1 : 日元走勢圖
>   q1 %>% dyEvent("2014-10-31", "安倍宣布加強量化寬鬆政策", labelLoc = "top", col='blue') %>% 
+          dyEvent("2014-5-20", "巧虎媽媽生日", labelLoc = "bottom", col='gold')

DyLimit ()

  • y軸的標記
  • labelLoc left or right
> # q1 : 日元走勢圖
> a<-data.ts[which(data[ ,'Date']=='2014/10/31'), 'USDJPY']
> q1 %>% dyEvent("2014-10-31", "安倍宣布加強量化寬鬆政策", labelLoc = "bottom", col='royalblue') %>% 
+        dyLimit(a, '日幣又開始狂貶了' , labelLoc='right' ,color = "magenta")

DyRangeSelector ()

  • 可以深入分析資料細節 ( year -> month -> day )
  • dyRangeSelector (height = ? )
  • height 為 RangeSelector 的高度
> dygraph(EP ,main = "匯率走勢") %>%
+    dySeries("USDEUR", label = "歐元走勢") %>%
+    dySeries("USDGBP", label = "英鎊走勢") %>% 
+    dyRangeSelector(height = 20)

DyLegend ()

  • show = "follow" : Legend 會一直跟著你的滑鼠
> q1 %>% dyLegend(show = 'follow')

  • show = "always" : Legend 會一直出現在右上方
  • hideOnMouseOut = TRUE : 每當滑鼠移開Legend會變回(日圓走勢)。
> q1 %>% dyLegend(show = "always", hideOnMouseOut = T)

尺規問題

  • 英鎊、歐元不見了
> dygraph(data.ts, main = "Exchange Rate")

尺規問題 - 目前解決辦法

  • 如果硬要三條尺規差異很大的序列出現在同一張圖,只好加入第二個Y軸
> q3 <- dygraph(data.ts, main = "Exchange Rate") %>%
+         dySeries("USDJPY", axis = 'y2') %>%
+         dyRangeSelector(height = 20)
> q3

加入 RColorBrewer

  • 可以使用 RColorBrewer ,但參數fillGraph = TRUE 有時候會失效。
> q3 %>% dyOptions(colors = RColorBrewer::brewer.pal(3, 'Dark2')) 

多條線的變化

> q3 %>% dyHighlight(highlightCircleSize = 3,              
+                    highlightSeriesBackgroundAlpha = 0.2) # highlightSeriesBackgroundAlpha 深淺調整

預測圖製作

  • 資料調整格式如下
  • 把預測資料前面補 NA

預測圖製作

> dygraph(pred.ts, " 日圓預測走勢 ") %>%
+   dySeries("真實值", label = "Actual",color = "midnightblue") %>% 
+   dySeries(c("下界", "模型預測值", "上界"), label = "Predicted",strokeWidth = 1,color='forestgreen') %>%
+   dyRangeSelector(height = 20) %>% 
+   dyLegend(show = "always", hideOnMouseOut = T)