如何在 R Plotly 中用颜色向量绘制一条线
How to plot a line with color vector in 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 模拟一些虚构金融资产的 returns,并定义了一个名为 'col' 的颜色向量,其中上升信号为绿色,下降信号为红色.
我要制作的东西是这样的:
library(ggplot2)
ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1))
但我想使用 plotly 制作类似的图像,以便我可以放大绘图的各个部分。我的第一个想法是尝试在生成所需图像的代码周围简单地使用 ggplotly() 函数:
library(plotly)
ggplotly(ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)))
但是剧情已经不分组了。此外,我尝试使用 plot_ly() 但似乎无法根据我指定的 'col' 属性使线段获得颜色:
plot_ly(data=df, x = ~x) %>% add_lines(y = ~y, line = list(color=~col))
但是我的颜色参数不会影响线条的颜色。我尝试了其他各种方法,但最终还是以两个不受欢迎的情节之一结束。任何帮助将不胜感激!
注意:我已经使用 plot_ly() 制作了烛台和 OHLC 图表,但我无法使用它们,因为当您放大到剧情.
通过使用 geom_segment
并使每个段 link 达到下一个 (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
一开始就没有产生所需的输出,我没有一个好的答案。
假设我有以下数据框:
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 模拟一些虚构金融资产的 returns,并定义了一个名为 'col' 的颜色向量,其中上升信号为绿色,下降信号为红色.
我要制作的东西是这样的:
library(ggplot2)
ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1))
但我想使用 plotly 制作类似的图像,以便我可以放大绘图的各个部分。我的第一个想法是尝试在生成所需图像的代码周围简单地使用 ggplotly() 函数:
library(plotly)
ggplotly(ggplot(df, aes(x=x, y=y)) + geom_line(aes(colour=col, group=1)))
但是剧情已经不分组了。此外,我尝试使用 plot_ly() 但似乎无法根据我指定的 'col' 属性使线段获得颜色:
plot_ly(data=df, x = ~x) %>% add_lines(y = ~y, line = list(color=~col))
但是我的颜色参数不会影响线条的颜色。我尝试了其他各种方法,但最终还是以两个不受欢迎的情节之一结束。任何帮助将不胜感激!
注意:我已经使用 plot_ly() 制作了烛台和 OHLC 图表,但我无法使用它们,因为当您放大到剧情.
通过使用 geom_segment
并使每个段 link 达到下一个 (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
一开始就没有产生所需的输出,我没有一个好的答案。