2017-09-11 66 views
2

說我有以下數據幀:如何繪製與R顏色矢量線Plotly

ret <- rnorm(100, 0, 5) 
df <- data.frame(
    x = seq(1, 100, 1), 
    ret = ret, 
    y = 100 + cumsum(ret), 
    col = c(ifelse(ret > 0, "red", "forestgreen"), NA)[-1] 
) 

這裏我使用的是名爲「RET」 RNORM模擬一些虛構金融資產的回報,我定義一個名爲'col'的顏色矢量,其中up​​ticks是綠色,downticks是紅色的。

我想生產什麼東西像下面這樣:

library(ggplot2) 
ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)) 

enter image description here

但我想用plotly作出類似的圖像,這樣我可以對劇情的部分進行放大。我首先想到的是試圖簡單地用周圍產生所需的圖像的代碼ggplotly()函數:

library(plotly) 
ggplotly(ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1))) 

Using ggplotly

但情節不再分組。此外,我嘗試使用plot_ly(),但似乎無法使線段得到他們的顏色根據「關口」屬性是我指定:

plot_ly(data=df, x = ~x) %>% add_lines(y = ~y, line = list(color=~col)) 

enter image description here

但我的顏色參數不會影響線條的顏色。我嘗試過其他各種各樣的事情,但不斷以兩個不想要的情節之一結束。任何幫助將非常感激!

注意:我已經用plot_ly()製作了燭臺和OHLC圖表,但是我無法使用它們,因爲當您放大圖的一個子部分時,y軸不會縮放。

回答

2

我能夠通過使用geom_segment,使每一段鏈接到下一個(x, y)價值得到ggplotly所需的行爲,不分膚色:

library(dplyr) 
df = df %>% 
    arrange(x) %>% 
    mutate(x_next = lead(x), y_next = lead(y)) 

p = ggplot(df, aes(x=x, y=y)) + 
    geom_segment(aes(xend = x_next, yend = y_next, colour=col)) 
ggplotly(p) 

這麼說,我沒有一個很好的回答爲什麼ggplotly首先不會產生所需的輸出。