这项研究的样本与我的需求非常接近。问题是,如何实现条件背景颜色,如下图所示。这个图表有两个类别,我有三个,所以我会为第三个使用一些纹理。
随时间变化的条件类别位于名称为CL,C和CR的向量中。
这是一些示例数据。因此,有索引,然后是政府类型的类别(中左,中,右中)。在数据中有72个政府术语,因此有72个连续的运行,因此手工操作它至少是一种麻烦。我知道首先我需要绘制类别,然后将这些线添加到图中,我会在事后对轴进行担心并最后添加它们。
shareindex categ
100 C
103 C
104 C
102 CL
99 CL
98 CR
99 CR
101 CL
104 CL
105 CR
104 CR
102 C
103 C
答案 0 :(得分:2)
这里有一些示例数据,并使用plot
参数调用panel.first
来绘制矩形。我在这里建议使用lapply
调用来简单地绘制许多矩形。
# data
set.seed(1)
x <- rnorm(1000)
x2 <- cumsum(x)
y <- rnorm(1000)
y2 <- cumsum(y)-5
ranges <- list(c(5,10), c(20,100), c(200,250), c(500,600), c(800,820), c(915,930))
# expression to be used for plotting gray boxes
boxes <- expression(lapply(ranges, function(z) rect(z[1],-100,z[2],100, col='gray', border=NA)))
# the actual plotting
plot(1:1000, x2, type='l', xlab='time', panel.first = eval(boxes))
lines(1:1000, y2, col='red')
答案 1 :(得分:0)
您可以使用rect
制作矩形并在该
对于您的数据示例:
set.seed(1)
x <- 1:100
y <- cumsum(rnorm(100))
z <- c(rep(1, 10), rep(2,20), rep(1,40), rep(3,30))
plot(x, y, type="n")
rect(xleft = x - 1, xright = x, ybottom=par("usr")[3], ytop=par("usr")[4], col=z, border=NA )
lines(x, y, col="white")
编辑您的数据:
## Data frame with the data
dat <- data.frame(shareindex=c(100,103,104,102, 99,98,99,101,104,105,104,102,103),
categ=c("C","C","C","CL","CL","CR","CR", "CL", "CL","CR", "CR","C", "C"))
## Add index column
dat$id <- seq(along.with=dat$shareindex)
# Add your background colors here
cols <- c("lightgray","grey", "lightblue")
## Just an empty plot
plot(dat$id, dat$shareindex, type="n", ylab="Share index", xlab="id")
## Plot the rectangles for the background
rect(xleft =dat$id - 1 , xright = dat$id,
ybottom=par("usr")[3], ytop=par("usr")[4],
col=cols[dat$categ], border=NA )
## Plot the line
lines(dat$id, dat$shareindex, lwd=2)
输出如下:
干杯,
亚历