如何跨多个方面遵循规则创建着色区域

时间:2013-06-06 19:54:32

标签: r ggplot2 time-series

以前有一些关于如何使用geom_rect()在ggplot2中制作阴影区域的帖子,但它们都没有帮助以编程方式跨构面创建这些阴影区域。对于希望在面板数据中绘制特定单位时段的人来说,对我的问题的一个很好的答案将是非常强大和有用的。

我能找到的最近的ggplot2示例就是这里,它显示了经济时间序列图中经济衰退的阴影区域,但是我无法使用facet_wrap使这个策略有效。

我想制作完全these种阴影区域,但只要一个单位的虚拟对象等于0(或1),就可以在整个构面上进行编程。

下面是使用facet_wrap()在ggplot2中绘制的面板数据的可重现示例。单位坚固,时间是一年。数据有一个名为“dummy”的虚拟变量。 我的问题是:如何为一个国家的“虚拟”等于0的单位特定时期创建阴影区域。暗示,这意味着当国家的虚拟等于1时显示无阴影区域。 /强>

非常感谢任何帮助

require(plm)
data("Grunfeld", package="plm")
set.seed(888)
Grunfeld$dummy<-rbinom(200,1,prob=.3)

require(reshape2)
dfm <- melt(Grunfeld, id.vars=c("firm","year"))

require(ggplot2)
ggplot(dfm) +
geom_line(aes(x=year, y=value, linetype=variable, colour=variable)) +
theme_bw() +
facet_wrap( ~ firm)

1 个答案:

答案 0 :(得分:2)

您可以使用geom_rect()和未融合的Grunfeld数据框执行此操作。将ymax设置为Infymin设置为-Inf会使阴影区域从上到下延伸。您还需要定义xminxmax,这很容易,因为每年都有一行。

ggplot(dfm) +
    geom_rect(data = subset(Grunfeld, dummy == 0), 
              aes(ymin = -Inf, ymax = Inf, xmin = year-0.5, xmax = year+0.5), 
              alpha = 0.2)+
    geom_line(aes(x=year, y=value, linetype=variable, colour=variable)) +
    theme_bw() +
    facet_wrap( ~ firm)