2017-09-11 62 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首先不会产生所需的输出。