使用geom_rect将阴影矩形添加到现有绘图

时间:2017-01-13 15:03:12

标签: r ggplot2

我很难在现有的ggplot上添加一系列阴影矩形。在此先感谢您的帮助。

我首先使用geom_line制作时间序列折线图。我使用了数据框" unemp_table",并绘制了"月"在X,和" NYC.Employment"在Y.

unemp_table看起来像这样:

   Month        Sample        NYC.Employment     
  (date)        (int)           (int)                                           
 1976-01-01      1              2771                            
 1976-02-01      2              2770                                       
 1976-03-01      3              2769                                           
 1976-04-01      4              2768                                         

我的ggplot代码(有效)如下所示:

unemp_graph <- ggplot(data=unemp_table, aes(x=Month,y=NYC.Employment)) 
+geom_line()

接下来,我想绘制一些阴影衰退条。

我首先加载了一个不同的数据框(Reces_table),其中包含每个相关衰退的开始和结束。

Reces_table看起来像这样:

  Start        End
  (date)     (date)
1 1980-01-01 1980-07-01
2 1981-07-01 1982-11-01
3 1990-07-01 1991-03-01
4 2001-03-01 2001-11-01
5 2007-12-01 2009-06-01

但是,当我尝试将这些点绘制为阴影矩形时,我会收到错误。

此代码:

unemp_graph + geom_rect(Reces_table, aes(xmin=Start, xmax=End, 
ymin=-Inf, ymax=+Inf), fill='pink', alpha=0.2)

给我这个错误:

Error: ggplot2 doesn't know how to deal with data of class uneval

我在一个不同的主题中读到我需要添加&#34; data =&#34;进入geom_rect函数。但是,更新的代码:

unemp_graph + geom_rect(data=Reces_table, 
aes(xmin=Start, xmax=End, ymin=-Inf, ymax=+Inf), fill='pink', alpha=0.2)

给我这个错误:

Error in eval(expr, envir, enclos) : object 'Month' not found

任何提示都将不胜感激,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你可以试一试。我将inherit.aes参数添加到geom_rect调用。

   unemp_table <- read.table(text = "Month        Sample        NYC.Employment     
                     1976-01-01      1              2771                            
                     1976-02-01      2              2770                                       
                     1976-03-01      3              2769                                           
                     1976-04-01      4              2768", header = TRUE, 
                     stringsAsFactors = FALSE)
    unemp_table$Month <- as.Date(unemp_table$Month)


    Reces_table <- read.table(text = "  Start        End
                               1 1980-01-01 1980-07-01
                               2 1981-07-01 1982-11-01
                               3 1990-07-01 1991-03-01
                               4 2001-03-01 2001-11-01
                               5 2007-12-01 2009-06-01", header = TRUE,
                               stringsAsFactors = FALSE)
    Reces_table$Start <- as.Date(Reces_table$Start)
    Reces_table$End <- as.Date(Reces_table$End)

    unemp_graph <- ggplot(data=unemp_table, aes(x=Month,y=NYC.Employment))  + 
      geom_line() + geom_rect(data= Reces_table, inherit.aes = FALSE,
                              aes(xmin=Start, xmax=End, ymin=-Inf, ymax=+Inf), 
                              fill='pink', alpha=0.2)

enter image description here

根据文件:

  

inherit.aes   如果为FALSE,则覆盖默认美学,而不是与它们组合。这对于定义数据和美学的辅助函数最有用,并且不应该从默认的绘图规范继承行为,例如:边界。

调用ggplot时,将aes参数设置为aes(x = Month, y = NYC.Employment。如果inherit.aes = FALSE未通过geom_rectggplot会尝试将您输入aes的{​​{1}}与默认geom_rect合并(即在aes的初始调用中设置。由于ggplot中没有Month,因此无法完成此操作。