Я пытаюсь добавить нулевую линию к граничному графику в ggplot2
с датами на оси х. Проблема в том, что я также добавляю многоугольники для представления определенных промежутков времени, поэтому я должен передать отдельный data.frames
, чтобы отделить geoms
, что дает некоторые трудности.ggplot2 - добавить горизонтальную линию к граненому графику с датами по оси x
Вот пример с непрерывной осью х:
ggplot()+
geom_rect(data=data.frame(from=c(1,3),to=c(2,4)),aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=c(1,2,3,4,5,6),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Если я пытаюсь добавить горизонтальную линию с geom_hline
я получаю сообщение об ошибке: Error in if (empty(data)) { : missing value where TRUE/FALSE needed
, которую я беру, потому что geom_vline
потребности унаследовать информация предоставляется в основании ggplot
линия. Однако, как отмечено выше, я должен предоставить отдельный data.frames
для создания точек и затененных многоугольников.
Это можно обойти, если ось х непрерывна с помощью geom_line
и установки значения Inf
:
ggplot()+
geom_line(data=data.frame(x=c(-Inf,Inf),y=0),aes(x=x,y=y),col="grey50",lwd=1)+
geom_rect(data=data.frame(from=c(1,3),to=c(2,4)),aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=c(1,2,3,4,5,6),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Но если переключить ось х к датам, то я не могу добавить горизонтальная линия с использованием geom_hline
(по тем же причинам, что и выше):
dates=c("2001-01-1","2002-01-01","2003-01-01","2004-01-01","2005-01-01","2006-01-01")
ggplot()+
geom_hline(aes(yintercept=0))+
geom_rect(data=data.frame(from=c(as.Date("2001-01-1"),as.Date("2003-01-01")),
to=c(as.Date("2002-01-1"),as.Date("2004-01-01"))),
aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=as.Date(dates),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Аналогично, используя geom_line
как описано выше, не приводит к ошибке: Error: Discrete value supplied to continuous scale
потому, что ось х больше не непрерывно.
можно указать конечные точки geom_line
как даты:
ggplot()+
geom_line(data=data.frame(x=c(as.Date("2001-01-01"),as.Date("2006-01-01")),y=0),aes(x=x,y=y),col="grey50",lwd=1)+
geom_rect(data=data.frame(from=c(as.Date("2001-01-1"),as.Date("2003-01-01")),
to=c(as.Date("2002-01-1"),as.Date("2004-01-01"))),
aes(xmin=from,xmax=to,ymin=-Inf,ymax=Inf),fill="red",alpha=0.1)+
geom_point(data=data.frame(x=as.Date(dates),y=c(6,7,8,9,10,11),type=rep(letters[1:2],each=3)),aes(x=x,y=y))+
facet_grid(type~.)
Но теперь линия не распространяется на длину участка!
Как я могу воспроизвести вывод geom_vline
, используя что-то, что будет работать с датами на оси х и грани?
Сын ружьем. Я должен тебе кока-колу! – jslefche