J'utilise ggplot2 pour explorer les effets de différentes opérations militaires sur les taux de meurtre. Pour montrer l'effet, je dessine une ligne verticale lorsque l'opération s'est produite et une ligne lissée du taux de meurtre avant et après l'opération.Comment obtenir geom_vline et facet_wrap de ggplot2 pour travailler dans une fonction
J'ai écrit un tracé facet_wrap pour le montrer à tout un tas de comtés. Cela fonctionne admirablement, mais quand converti en fonction j'obtiens une erreur en utilisant une variable locale pour dessiner la ligne verticale.
Voici quelques exemples de code:
drawTS <- function(df, dates, text) {
p <- ggplot(df, aes(date, murders)) +
facet_wrap(~ county, ncol = 1,
scale="free_y") +
scale_x_date() +
geom_smooth(aes(group = group), se = FALSE)
for(i in 1:length(dates)) {
#If it's not a global variable I get an object not found error
temp[i] <<- dates[i]
p <- p + geom_text(aes(x,y), label = text[i],
data = data.frame(x = dates[i], y = -10),
size = 3, hjust = 1, vjust = 0) +
#Here's the problem
geom_vline(xintercept=temp[i], alpha=.4)
}
p
}
library(ggplot2)
df <- data.frame(date = rep(seq(as.Date("2007/1/01"),
length=36, by='1 month'),4),
murders = round(runif(36*4) * 100),
county = rep(rep(factor(1:4),9),each=4),
group = rep(c(rep(1,6), rep(2,12),rep(3,18))), each=4)
dates <- c(as.Date("2007/6/15"), as.Date("2008/6/15"))
temp <- c()
drawTS(df, dates, c("Op 1","Op 2"))
Il n'y a pas d'erreur avec la variable globale, mais il semble laid.
Si au lieu de la variable temp[i]
j'utilise dates[i]
intérieur geom_vline()
, je reçois ceci:
Erreur dans NextMethod ("["): objet 'i' not found
Si J'enveloppe la variable dates[i]
dans aes()
, je reçois:
Erreur dans eval (expr, Envir, Enclos): objet 'comté' Pas trouvé
Quelqu'un sait comment résoudre ce problème?
Donc, l'astuce est d'utiliser un deuxième trame de données ... Merci! – diegovalle