web-dev-qa-db-fra.com

Comment obtenir un geom_vline vertical à un axe x de la date de classe?

Même si j'ai trouvé le post de Hadley dans le groupe Google sur POSIXct et geom_vline, Je n'ai pas pu le faire. J'ai une série chronologique de et voudrais dessiner une ligne verticale pour les années 1998, 2005 et 2010 par exemple. J'ai essayé avec la syntaxe ggplot et qplot, mais je ne vois toujours pas de ligne verticale du tout ou bien la ligne verticale est dessinée sur la toute première grille verticale et toute la série est décalée quelque peu étrangement vers la droite.

gg <- ggplot(data=mydata,aes(y=somevalues,x=datefield,color=category)) +
      layer(geom="line")
gg + geom_vline(xintercept=mydata$datefield[120],linetype=4)
# returns just the time series plot I had before, 
# interestingly the legend contains dotted vertical lines

Mon champ de date a le format "1993-07-01" et est de classe Date.

89
Matt Bannert

Essayez as.numeric(mydata$datefield[120]):

gg + geom_vline(xintercept=as.numeric(mydata$datefield[120]), linetype=4)

Un exemple de test simple:

library("ggplot2")

tmp <- data.frame(x=rep(seq(as.Date(0, Origin="1970-01-01"),
                            length=36, by="1 month"), 2),
                  y=rnorm(72),
                  category=gl(2,36))

p <- ggplot(tmp, aes(x, y, colour=category)) +
     layer(geom="line") +
     geom_vline(aes(xintercept=as.numeric(x[c(13, 24)])),
                linetype=4, colour="black")
print(p)

geom_vline example plot

126
rcs

Vous pouvez également faire geom_vline(xintercept = as.numeric(as.Date("2015-01-01")), linetype=4) si vous voulez que la ligne reste en place, que votre date soit ou non dans la 120e ligne.

19
D.Hadley