2016-04-21 90 views
0

我想畫一個時間序列箱線圖中的R與plotly庫,但是我需要能夠有YMIN,YMAX,ylow等箱線圖中ggplotly

總量控制它呈現完美的罰款在ggplot2中,雖然有很多警告。它無法在ggplotly中呈現

這就是我所擁有的。

msft = read.csv("http://ichart.finance.yahoo.com/table.csv?s=MSFT", 
      header=TRUE, 
      sep=",") 
msft$Date 
msftF = msft %>% tbl_df() %>% filter(as.Date(Date) > as.Date("2016-01-01"))  %>% na.omit() 
msftF %>% 
    ggplot(aes(x = factor(Date), ymin = Low, lower = Open, middle = Close,  upper = Close, ymax = High)) + 
    geom_boxplot() + 
    geom_boxplot(stat = "identity") 
+0

如果收盤低於開放,會發生什麼?然後,您將「較低」設置爲比「較高」更高的值。 – user1357015

+0

我試圖過濾出這些案件無濟於事。 msft = read.csv(「http://ichart.finance.yahoo.com/table.csv?s=MSFT」, header = TRUE, sep =「,」) msft $ Date msftF = msft%> % tbl_df()%>% filter(as.Date(Date)> as.Date(「2016-01-01」))%>% filter(Close> Open)%>% na.omit() ()= ggplot(aes(x = factor(Date),ymin = Low,lower = Open,middle = Close,upper = Close,ymax = High))+ geom_boxplot()+ geom_boxplot =「身份」) ggplotly(x) –

+0

我基本上正在試圖建立一個燭臺圖表,但財務包裝似乎不存在的R呢。 –

回答

1

@大衛克魯克這裏有一個簡單的例子。

library(plotly) 
library(quantmod) 

prices <- getSymbols("MSFT", auto.assign = F) 
prices <- prices[index(prices) >= "2016-01-01"] 

# Make dataframe 
prices <- data.frame(time = index(prices), 
        open = as.numeric(prices[,1]), 
        high = as.numeric(prices[,2]), 
        low = as.numeric(prices[,3]), 
        close = as.numeric(prices[,4])) 

# Blank plot 
p <- plot_ly() 

# Add high/low as a line segment 
# Add open close as a separate segment 
for(i in 1:nrow(prices)){ 
    p <- add_trace(p, data = prices[i,], x = c(time, time), y = c(high, low), mode = "lines", evaluate = T, 
       showlegend = F, 
       marker = list(color = "grey"), 
       line = list(width = 1)) 

    p <- add_trace(p, data = prices[i,], x = c(time, time), y = c(open, close), mode = "lines", evaluate = T, 
       showlegend = F, 
       marker = list(color = "#ff5050"), 
       line = list(width = 5)) 
} 

p 

UPDATE: 與plotly 4.0這樣的版本是輕鬆了許多:

library(plotly) 
library(quantmod) 

prices <- getSymbols("MSFT", auto.assign = F) 
prices <- prices[index(prices) >= "2016-01-01"] 

# Make dataframe 
prices <- data.frame(time = index(prices), 
        open = as.numeric(prices[,1]), 
        high = as.numeric(prices[,2]), 
        low = as.numeric(prices[,3]), 
        close = as.numeric(prices[,4])) 

plot_ly(prices, x = ~time, xend = ~time, showlegend = F) %>% 
    add_segments(y = ~low, yend = ~high, line = list(color = "gray")) %>% 
    add_segments(y = ~open, yend = ~close, 
       color = ~close > open, 
       colors = c("#00b386","#ff6666"), 
       line = list(width = 3)) 

更完整的例子在這裏看到:http://moderndata.plot.ly/candlestick-charts-using-plotly-and-quantmod/

+0

真棒醬!正是我在找什麼。 –

0

您可以使用quantmod軟件包執行此操作。

嘗試以下操作:

library(quantmod) 
getSymbols("MSFT") 
candleChart(MSFT,multi.col=TRUE,theme='white') 

可以剪裁MSFT對象到一個較小的日期範圍,如果你並不需要所有的人。

如果您需要使用ggplot,請告訴我,我會編寫代碼。但通常情況下,我會堅持使用包裝,因爲它更乾淨!

+0

這很快,光滑。我希望ggplot2,所以我可以將它推入情節。我的最終目標是獲得一個繪圖可視化或html5/css/javascript,我可以將其推送到客戶端並讓UI人員擁有它。 –

0

Royr2回答了這個問題,但是他沒有在幾天內將答案從評論中轉移到答案中,所以爲了將答案作爲一個明顯的答案來捕獲,我只是將他的評論轉化爲答案。如果他發佈他的答案,我會很樂意將他的答案標記爲合適的答案。

我寫的東西的人在這裏plotly - >http://moderndata.plot.ly/candlestick-charts-using-plotly-and-quantmod/使用plot_ly()而不是ggplotly()不說,功能是通過在quantmod包圖表啓發:)希望幫助去。 .. -

royr2 4月25日在5:02