Создание пользовательских легенд в ggplot2

Я пытаюсь создать легенду, которая будет принимать пользовательские метки и цвета, альфа, соответствующие выделенным областям на аннотированном графике, а не серии данных, нанесенных на диаграмму, используя код:

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

где я хотел бы добавить легенду с надписями "1970-е", "1990-е" с соответствующими цветами красного и зеленого с альфа-каналом 0,2, соответствующим аннотированным элементам. Есть ли способ сделать это?

1 ответ

Решение

Проще всего было бы создать новый фрейм данных для регионов, которые должны быть аннотированы.

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"))

Тогда используйте 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"))

введите описание изображения здесь

Другие вопросы по тегам