1

以前有几篇关于如何使用 geom_rect() 在 ggplot2 中制作阴影区域的文章,但没有一篇文章有​​助于以编程方式跨方面创建这些阴影区域。对于希望在面板数据中绘制特定于单位的时期的任何人,对我的问题的一个好的回答将非常强大和有帮助。

我能找到的最接近的 ggplot2 示例在这里,它在经济时间序列图中显示衰退的阴影区域,但我无法使这个策略与 facet_wrap 一起使用。

我想准确地制作这些类型的阴影区域,但是只要一个单元的虚拟变量等于 0(或 1),就可以通过编程方式跨越各个方面。

下面是使用 facet_wrap() 在 ggplot2 中绘制的面板数据的可重现示例。单位是固定的,时间是年。数据有一个称为“虚拟”的虚拟变量。我的问题是:如何为一个国家的“虚拟”等于 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)
4

1 回答 1

2

您可以使用geom_rect()未熔化的Grunfeld数据框来做到这一点。设置ymaxtoInfyminto-Inf将使阴影区域从上到下延伸。您还需要定义xminand xmax,这在这里很容易,因为您每年都有一行。

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)
于 2013-06-06T21:03:15.687 回答