Sto provando ad aggiungere una linea zero a un grafico sfaccettato in ggplot2
con le date sull'asse x. Il problema è che sto aggiungendo anche poligoni per rappresentare determinati intervalli di tempo, quindi devo passare separato data.frames
per separare geoms
, il che causa alcune difficoltà.ggplot2 - aggiungi la linea orizzontale al grafico sfaccettato con le date sull'asse x
Ecco un esempio con un asse x continua:
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~.)
Se provo ad aggiungere una linea orizzontale con geom_hline
ottengo un errore: Error in if (empty(data)) { : missing value where TRUE/FALSE needed
, che prendo è perché geom_vline
deve ereditare informazioni fornite nella riga ggplot
di base. Come indicato sopra, tuttavia, devo fornire data.frames
separato per creare entrambi i punti e i poligoni ombreggiati.
Questo può essere lavorato in giro se l'asse x è continua utilizzando geom_line
e l'impostazione dei valori di 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~.)
Ma se passo l'asse x per le date, quindi non posso aggiungere una linea orizzontale utilizzando geom_hline
(per le stesse ragioni come sopra):
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~.)
Analogamente, utilizzando geom_line
come sopra genera un errore: Error: Discrete value supplied to continuous scale
perché l'asse x non è continua.
posso specificare i punti finali di geom_line
come date:
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~.)
Ma ora la linea non estendere la lunghezza della trama!
Come è possibile riprodurre un output di tipo geom_vline
utilizzando qualcosa che funzioni con le date sull'asse xe le faccette?
Figlio di una pistola. Ti devo una coca cola! – jslefche