Plusieurs graphiques sur plusieurs pages en utilisant ggplot
je fais une analyse exploratoire de mes données et j'ai besoin de tracer des graphiques multiples en utilisant ggplot. La quantité de graphiques est vraiment énorme (206 Stations), et je voulais les tracer dans 1 colonne versus 8 lignes par page sur le tant de pages nécessaires. Je connais des fonctions comme viewport ou grid.arrangez, mais je ne réussis pas à les faire marcher dans ce cas. J'ai déjà remarqué que layout() nor par(mfrow=c(8,1)) ne fonctionne pas avec ggplot, mais j'envoie la partie du code où je suis coincé bellow. Toute aide serait grandement appréciée!
pdf('test.pdf', width=21, height=27)
par(mfrow=c(8,1))
for(i in levels(tab$Station))
{
print(ggplot(tab[tab$Station==i], aes(x=Date)) +
geom_line(aes(y=Tmin), col="blue", size=0.1) +
geom_line(aes(y=Tmax), col="red", size=0.1) +
geom_text(aes(x=as.Date('2010-01-01'), y=45), label=i) +
ylim(0, 45) +
scale_x_date(labels = date_format("%Y")) +
theme_bw() +
theme(
plot.background = element_blank()
,panel.grid.major = element_blank()
,panel.grid.minor = element_blank()
,panel.border = element_rect(color = 'black')
,panel.background = element_blank()
)
)
}
dev.off()
4 réponses
library(plyr)
library(gridExtra)
p = ggplot(tab, aes(x=Date)) +
geom_line(aes(y=Tmin), col="blue", size=0.1)
plots = dlply(tab , "Station", `%+%`, e1 = p)
ml = do.call(marrangeGrob, c(plots, list(nrow=8, ncol=1)))
ggsave("multipage.pdf", ml)
non testé.
vous devez simplifier votre parcelle car une fois que vous obtenez le bon ordre avec une parcelle simple vous venez de la remplacer par votre compliquée. ggplot2
sont basés sur grid
le paquet de sorte que vous devez utiliser gridExtra
pour organiser vos parcelles. Ensuite vous bouclez , pour chaque 8 parcelles, vous les stockez dans une liste et vous appelez grid.arrange
dessus, et vous répétez cela jusqu'à la fin de vos parcelles...
library(gridExtra)
library(ggplot2)
pdf('test.pdf', width=21, height=27)
i = 1
plot = list()
for (n in unique(tab$Station)){
### process data for plotting here ####
plot[[i]] = ggplot(tab[tab$Station==n], aes(x=Date)) +...
if (i %% 8 == 0) { ## print 8 plots on a page
print (do.call(grid.arrange, plot))
plot = list() # reset plot
i = 0 # reset index
}
i = i + 1
}
if (length(plot) != 0) {
print (do.call(grid.arrange, plot))
}
dev.off()
Le Faceting pourrait être la solution. Décidez du nombre de mini-placettes à facettes que vous voulez par page, puis faites une boucle à travers le nombre requis de fois, générant un png ou un pdf que vous allez. Donc, si vous avez 200 éléments de données et que vous voulez 50 par page, en facettes de 5 à travers et 10 vers le bas, il suffit de boucler par 200/50 = 4 itérations. Brut, mais devrait fonctionner.
library(ggplot2)
ii <- 7
nn <- 49
mydf <- data.frame(date = rep(seq(as.Date('2013-03-01'),
by = 'day', length.out = ii), nn),
value = rep(runif(nn, 100, 200)))
mydf$facet.variable <- rep(1:nn, each = ii)
p <- ggplot(mydf, aes(x = date, y = value)) +
geom_line() +
facet_wrap(~ facet.variable, ncol = ii)
print(p)
Malheureusement, mfrow
ne fonctionne pas avec ggplot2
. Vous devez utiliser d'autres méthodes comme celui-ci ou celui-ci ou utiliser le natif plot
fonction.
peut-être Pouvez-vous utiliser faceting pour obtenir les 8 tracés sur une page, puis le second lien pour le mettre dans plusieurs documents...