如何解决GGplot的问题:在R
我一直在尝试为英国GDP增长建立条形图,并将其覆盖在衰退带中。我可以使用条形图执行必要的操作,但是当我覆盖衰退带的那一刻,我得到一个错误,即找不到变量。
uk.recessions.df <- read.table(textConnection(
"Peak,Trough
1857-06-01,1858-12-01
1867-06-01,1869-12-01
1873-10-01,1879-03-01
1882-03-01,1885-05-01
1887-03-01,1888-04-01
1890-07-01,1891-05-01
1893-01-01,1894-06-01
1895-12-01,1897-06-01
1919-03-01,1921-07-01
1930-01-01,1931-12-01
1956-04-01,1956-08-01
1961-07-01,1962-01-01
1973-09-01,1974-04-01
1975-04-01,1975-10-01
1980-01-01,1981-04-01
1990-07-01,1991-09-01
2008-04-01,2009-07-01
2020-01-01,2020-07-01"),sep=',',colClasses=c('Date','Date'),header=TRUE)
uk.recessions.trim.df <- subset(uk.recessions.df,Peak >= min(tbl.QQGDP$Date))
tbl.data <- tbl.QQGDP %>%
mutate(Value = GDPGrowth < 0)
p <- ggplot(data = tbl.data,aes(x = Date,y = GDPGrowth,fill = Value)) +
geom_col(position = "identity",colour = "black",size = 0.25) +
scale_fill_manual(values = c("#85225f","#dbab01"),guide = FALSE) +
theme_tq()
p <- p +
geom_rect(data = uk.recessions.trim.df,aes(xmin = Peak,xmax = Trough,ymin = -Inf,ymax = Inf),fill = "grey",alpha = 0.5)
p
我得到的错误是
Error in FUN(X[[i]],...) : object 'GDPGrowth' not found
我无法弄清楚我在做什么错。任何帮助(即使告诉我一个愚蠢的错误!)也将不胜感激。
解决方法
默认情况下,geom_*()
元素从图的顶层(ggplot()
)继承美学映射。在您的情况下,geom_rect()
调用继承了aes(x = Date,y = GDPGrowth,fill = Value)
,但是由于您具有不同的数据源(uk.recessions.trim.df
而不是tbl.data
)而找不到那些对象。
如果将选项inherit.aes = FALSE
添加到geom_rect()
,则会得到所需的图。
p <- ggplot(data = tbl.data,aes(x = Date,fill = Value)) +
geom_col(position = "identity",colour = "black",size = 0.25) +
scale_fill_manual(values = c("#85225f","#dbab01"),guide = FALSE)
p <- p +
geom_rect(data = uk.recessions.trim.df,aes(xmin = Peak,xmax = Trough,ymin = -Inf,ymax = Inf),fill = "grey",alpha = 0.5,inherit.aes = FALSE)
p
另一种方法(可能是更好的方法)是分别在每个geom中定义数据和aes,而不是在最初的ggplot()
调用中定义。例如:
p <- ggplot() +
geom_col(data = tbl.data,fill = Value),position = "identity",size = 0.25) +
scale_fill_manual(values = c("#85225f",guide = FALSE)
p <- p +
geom_rect(data = uk.recessions.trim.df,alpha = 0.5)
p
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。