我想绘制一条多色的线,颜色基于一个因子中的相应值.例如,每日股票收盘价的时间序列,其上涨超过一定数量的天数为蓝色,其中已经完成的天数为红色,其他日期为红色.无聊的黑色.
我的数据在一个xts对象中(其中包含因子as.numeric(myfactor)),我想使用quantmod chartSeries或chart_Series函数.但如果这是不可能的,那么使用的东西plot就足够了.
一些样本数据:
library(xts)
x = xts( data.frame( v=(rnorm(50)+10)*10, type=floor(runif(50)*4) ),
order.by=as.Date("2001-01-01")+1:50)
Run Code Online (Sandbox Code Playgroud)
我可以像这样绘制它:
library(quantmod)
chartSeries(x$v)
addTA(x$type, type='p')
Run Code Online (Sandbox Code Playgroud)
即如果使用彩色线段,我觉得将底部图表中的信息与顶部图表相匹配会更容易.
这段代码最初是示例代码的一个小修改?segments,这就是为什么图表的标题看起来很奇怪,但我决定无论如何都保留它。逻辑是“[.]”内的术语将根据 和 之间的差异形成的连续值之间的差异“选择”颜色,tail(y,-1)默认head(y,-1)值为“黑色”,在本例中阈值为 1,但是这很容易改变:
set.seed(123)
x <- 1:12; y <- rnorm(12)
plot(x, y, main = "arrows(.) and segments(.)")
s <- seq(length(x)-1)
arrows(x[s], y[s], x[s+1], y[s+1],
col= c("black", "red", "blue")[1+ # default=1
(tail(y,-1)-head(y,-1) < -1) + # big down (1+1)
2*(tail(y,-1)-head(y,-1) > 1) ] ) # big up (1+2)
Run Code Online (Sandbox Code Playgroud)
如果您只想钻孔线段,您可以使用该segments函数而不是 arrows.
我再次阅读这个问题时意识到,您说您的 xts 对象中已经有一个因子变量,尽管我的理解是 xts 对象可能无法保存因子类型列,因为它们是动物园的详细阐述 -类和 coredata 是一个 R 矩阵(因此没有级别属性)。但也许量化专家有解决方法吗?因此,这将是您发布一些数据的另一个原因,请务必用于dput展示该对象。从控制台输出构建 xts-objects 确实很麻烦。