use*_*676 6 plot r annotate legend ggplot2
我正在尝试创建一个图例,该图例将采用自定义标签和颜色,与注释图中突出显示区域对应的alphas,而不是使用代码在图表中绘制的数据系列:
library(ggplot2)
data(economics)
p1 <- ggplot(data=economics, mapping=aes(x=date, y=unemploy)) +
geom_line(size=1) +
annotate("rect", xmin=as.Date('1970-01-01'), xmax=as.Date('1980-01-01'), ymin=-Inf, ymax=Inf, alpha=0.2, fill="red") +
annotate("rect", xmin=as.Date('1990-01-01'), xmax=as.Date('2000-01-01'), ymin=-Inf, ymax=Inf, alpha=0.2, fill="green") +
p1
Run Code Online (Sandbox Code Playgroud)
我想添加一个带有标签的传奇,上面写着"1970年代","20世纪90年代",相应的颜色为红色和绿色,其中alpha为0.2,对应于注释元素.有办法做到这一点吗?
Did*_*rts 12
最简单的方法是为应该注释的区域创建新的数据框.
df<-data.frame(xmin=as.Date(c('1970-01-01','1990-01-01')),
xmax=as.Date(c('1980-01-01','2000-01-01')),
ymin=c(-Inf,-Inf),
ymax=c(Inf,Inf),
years=c("1970s","1990s"))
Run Code Online (Sandbox Code Playgroud)
然后使用geom_rect()
和这个新数据框添加这些区域.传奇将自动生成.使用scale_fill_manual()可以更改颜色.
ggplot(data=economics, mapping=aes(x=date, y=unemploy)) +
geom_line(size=1)+
geom_rect(data=df,aes(xmin=xmin,ymin=ymin,xmax=xmax,ymax=ymax,fill=years),
alpha=0.2,inherit.aes=FALSE)+
scale_fill_manual(values=c("red","green"))
Run Code Online (Sandbox Code Playgroud)