使用facet_wrap和ggplot2绘制每个方面内的整个数据

时间:2016-02-22 09:49:10

标签: r ggplot2

我正在尝试为每个数据集绘制和node v5.3.0的线图。我希望拥有的是浅灰色,透明或其他东西,背景中的所有数据集。

facet_wrap

enter image description here

这个图表是我得到了多远,但我希望每个图表中还有其他所有缺失的4行...我试图使用df <- data.frame(id=rep(letters[1:5], each=10), x=seq(10), y=runif(50)) ggplot(df, aes(x,y, group=id)) + geom_line() + facet_wrap(~ id) ,我只得到数据单行。

我期望的是每个方面都是这样的。

facet_wrap

enter image description here

2 个答案:

答案 0 :(得分:12)

这是另一种方法:

首先添加一个与id:

相同的新列
df$id2 <- df$id

然后根据没有原始id列的df添加另一个geom_line

ggplot(df, aes(x,y, group=id)) + 
  geom_line(data=df[,2:4], aes(x=x, y=y, group=id2), colour="grey") +
  geom_line() + 
  facet_wrap(~ id)

enter image description here

答案 1 :(得分:3)

这是一种方法。它可能不适合更大的数据集,因为我们复制数据number_of_facets - 次。

首先,我们进行一些数据争用来创建所需的数据帧。     df $ obs_id&lt; - 1:nrow(df)每次观察的#unique ID

#new data with unique ID's and 'true' facets
df2 <- expand.grid(true_facet=unique(df$id), obs_id=1:nrow(df))

#merge them
dat <- merge(df,df2,by="obs_id",all=T)

然后,我们创建一个定义'true'分面变量的标志,并从前景中识别背景。

dat$col_flag <- dat$true_facet == dat$id

现在,绘图很简单。我使用geom_line两次而不是刻度,因为这比尝试修复排序更容易(会导致黑色被绘制在灰色下面)。

p1 <- ggplot(dat, aes(x=x,y=y, group=id))+
  geom_line(color="grey")+
  geom_line(dat=dat[dat$col_flag,],size=2,color="black")+
  facet_wrap(~true_facet)

enter image description here