J'ai du mal à passer un POSIXCT stocké dans une variable comme xmin / xmax pour geom_rect. J'ai essayé de construire un exemple autonome sans banaliser ce que j'essaie de faire ...
L'idée est de prendre un objet de tracé GGPLot2, dont X est un posixt et "zoomer" sur un particulier Plage dans le temps. Le zoom est dans le top 80% et la série complète est dans les 20% inférieure avec un indicateur de quelle partie est Zoom'd sur le dessus. P>
Mon problème est que je ne peux pas sembler avoir Le xmin / xmax est passé dans geom_rect - chaque chose que j'ai essayée (autre que d'assembler la parcelle à la main au lieu de la fonction) me donne une erreur différente. J'ai essayé d'utiliser des AES (), Aes_string (), passant comme paramètres au lieu de l'esthétique, qui passe juste des cordes, etc. p>
L'exemple ci-dessous me dit: P>
library(ggplot2) subplot <- function(x, y) viewport(layout.pos.col=x, layout.pos.row=y) vplayout <- function(x, y) { grid.newpage() pushViewport(viewport(layout=grid.layout(y,x))) } anm_zoom <- function(limits, p) { lims <- as.POSIXct(limits) limlab <- paste(lims, collapse=" to ") top <- p + scale_x_datetime(limlab, limits=lims, expand=c(0,0)) bottom <- p; bottom <- bottom + opts(title="") bottom <- bottom + opts(legend.position="none") bottom <- bottom + opts(axis.title.y=theme_blank()) bottom <- bottom + scale_x_datetime("", expand=c(0,0)) bottom <- bottom + geom_rect(aes(xmin=lims[1], xmax=lims[2]), ymin=-Inf, ymax=Inf, fill="grey80", alpha=0.01) ## Render the plots vplayout(1,5) print(top, vp=subplot(1,c(1,2,3,4))) print(bottom, vp=subplot(1,5)) } pdate <- seq.POSIXt(from=as.POSIXct("2010-09-09 00:00"), to=as.POSIXct("2010-09-10 23:59"), by="2 mins") var1 <- rnorm(length(pdate)) var2 <- rnorm(length(pdate)) df1 <- data.frame(pdate, var1, var2) dm <- melt(df1, id="pdate") p <- ggplot(dm) + aes(x=pdate, y=value) + stat_summary(fun.y="sum", geom="line") anm_zoom(c("2010-09-09 12:15", "2010-09-09 12:30"), p)
3 Réponses :
Il vous suffit de changer le nom de vos limites de l'argumentation de la fonction, car je pense qu'il crée un conflit de scoper. Je viens de le changer en limites1 et aussi la première ligne de votre code pour lire LIMS = AS.posixcct (limites1) et cela fonctionne parfaitement. Vérifiez-le !! p>
Pouvez-vous publier votre code de travail? J'ai fait les changements que vous avez suggéré et je n'ai vu aucune différence du tout. Les valeurs stockées dans LIMS [1: 2] semblent raisonnables lorsqu'elles sont imprimées à l'intérieur de la fonction, et c'est ce que j'essaie de passer à geom_rect. J'apprécie la suggestion, cependant!
hmmmm, je pense que vous avez besoin d'une nouvelle fonction code> code> un peu comme puis p> donne vous ce que vous voulez. p> p> aes code> (en ce qu'elle n'essaie pas d'analyser ses arguments) et un peu comme
aes_string code> (en ce sens qu'elle évalue ses arguments immédiatement dans l'environnement local):
Oui, ça fait exactement ce que je voulais dire. J'adore toujours une réponse simple, même si je suis un peu gêné que c'est presque un noop ... :) Merci!
En raison des mises à jour de la version plus récente GGPLOT2 code> par
ggplot () code> dans la fonction utilise
AES_Q () code> comme suit: p>
Il semble AES _ code> fournirait la réponse aussi. L'aide mentionne que "
AES_Q code> est un alias à < Code> AES _ code> ".