说我有以下数据框:
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]
)
在这里,我使用名为&#39; ret&#39;的rnorm来模拟某些虚构金融资产的回报,并定义了一个名为&#39; col&#39;的颜色向量。 upticks是绿色的,而downticks是红色的。
我想要制作的内容如下:
library(ggplot2)
ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1))
但是我想用剧情制作一个类似的图像,以便我可以放大图的部分。我的第一个想法是尝试在生成所需图像的代码周围简单地使用ggplotly()函数:
library(plotly)
ggplotly(ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)))
但情节不再分组。另外,我尝试使用plot_ly(),但似乎不能使线段根据&#39; col&#39;我指定的属性:
plot_ly(data=df, x = ~x) %>% add_lines(y = ~y, line = list(color=~col))
但我的颜色参数不会影响线条的颜色。我已经尝试了其他各种各样的事情,但最终还是得到了两个不受欢迎的情节中的一个。任何帮助将不胜感激!
注意:我已经使用plot_ly()创建了烛台和OHLC图表,但是我无法使用它们,因为当您放大到子轴的y轴时,y轴不会缩放。曲线图。
答案 0 :(得分:3)
我可以使用ggplotly
从geom_segment
获得所需的行为,并使每个细分链接到下一个(x, y)
值,无论颜色如何:
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
首先没有产生所需的输出。