根据因子绘制使用不同颜色的时间序列

Dar*_*ook 5 r xts quantmod

我想绘制一条多色的线,颜色基于一个因子中的相应值.例如,每日股票收盘价的时间序列,其上涨超过一定数量的天数为蓝色,其中已经完成的天数为红色,其他日期为红色.无聊的黑色.

我的数据在一个xts对象中(其中包含因子as.numeric(myfactor)),我想使用quantmod chartSerieschart_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)

看起来像这样: 使用chartSeries绘图

即如果使用彩色线段,我觉得将底部图表中的信息与顶部图表相匹配会更容易.

42-*_*42- 1

这段代码最初是示例代码的一个小修改?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 确实很麻烦。