是否可以基于变量对时间序列进行彩色处理?

问题描述

我感兴趣的是通过基于另一个变量为序列着色为时间序列图添加另一维度的信息。以下是我尝试使用xts软件包进行的操作:

library(xts)
# create time series
set.seed(100)
tsvalues <- rnorm(100)
dates <- seq(as.Date("2020-01-01"),length=100,by="days")
xts1 <- xts(x=tsvalues,order.by=dates) 
# create the coloring variable and coloring value
colvar <- rnorm(50,15,5)
coloring <- colorRampPalette(terrain.colors(40))
colorval <- coloring(40)[colvar]
# plot
plot(xts1,col=colorval)

Here is the result

请注意,整个系列只是一种颜色,而希望的是,颜色将根据与每个数据点相对应的colorval值而变化。例如,可以按照以下步骤完成包含正确着色的基本绘图(而不是时间序列绘图):

plot(tsvalues,pch = 20,col = colorval)

Basic plot with coloring

使用xts并不是必需的要求,因此,如果有其他软件包甚至Base R本身都能很好地实现这一点,那肯定会起作用

解决方法

您可以使用lines

library(xts)
# create the coloring variable and coloring value
colvar <- rnorm(33,15,5)
coloring <- colorRampPalette(terrain.colors(33))
colorval <- coloring(33)[colvar]
# plot
plot(xts1,type="n")
Map(function(x,y) lines(xts1[x],col=colorval[y]),as.data.frame(t(cbind(1:100,1:100+1,1:100+2,1:100+3)[seq(1,98,3),])),1:33)

enter image description here


数据:

# create time series
set.seed(100)
tsvalues <- rnorm(100)
dates <- seq(as.Date("2020-01-01"),length=100,by="days")
xts1 <- xts(x=tsvalues,order.by=dates)