如何在R中实现这样的图形

时间:2014-04-14 17:11:18

标签: r

这项研究的样本与我的需求非常接近。问题是,如何实现条件背景颜色,如下图所示。这个图表有两个类别,我有三个,所以我会为第三个使用一些纹理。

随时间变化的条件类别位于名称为CL,C和CR的向量中。

sample graph

这是一些示例数据。因此,有索引,然后是政府类型的类别(中左,中,右中)。在数据中有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

2 个答案:

答案 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')

enter image description here

答案 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")

Example plot

编辑您的数据:

## 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)

输出如下:

Plot of your data

干杯,

亚历