2016-04-11 9 views
2

Ich arbeite an einer Populationspyramide, die als gif gespeichert werden soll. Kind of like in this tutorial of Flowing Data, aber mit ggplot anstelle von plotrix.Achse für mehrere Diagramme in ggplot setzen

Mein Workflow:

1) Erstellen Sie eine Bevölkerung pyramide

2) Erstellen Sie mehrere pyramide-Plots in einem for -loop

for (i in unique(d$jahr)) { 

    d_jahr <- d %>% 
    filter(jahr == i) 

    p <- ggplot(data = d_jahr, aes(x = anzahl, y = value, fill = art)) + 
    geom_bar(data = filter(d_jahr, art == "w"), stat = "identity") + 
    geom_bar(data = filter(d_jahr, art == "m"), stat = "identity") + 
    coord_flip() + 
    labs(title = paste(i), x = NULL, y = NULL) 

    ggsave(p,filename=paste("img/",i,".png",sep="")) 

} 

3) mit der animation die Plots als gif speichern Paket

Mein Problem:

Alle Jahre haben unterschiedliche Werte, daher haben die X-Achsen unterschiedliche Bereiche. Dies führt zu merkwürdigen Blicken in einem GIF, da die Mitte der Diagramme nach rechts, nach links, nach rechts springt ...

Ist es möglich, die X-Achse (in diesem Fall die Y-Achse) zu fixieren , wegen coord-flip()) über mehrere Plots, die unabhängig voneinander erstellt werden?

+0

[Wie man ein großartiges reproduzierbares Beispiel macht?] (Http://stackoverflow.com/questions/5963269) – zx8754

+1

Vielleicht dieses Paket: https://github.com/dgrtwo/gganimate – zx8754

+0

Bitte lesen [wie mache ich Stellen Sie eine gute Frage] (http://stackoverflow.com/help/how-to-ask) und [ein minimal reproduzierbares Beispiel erstellen] (http://stackoverflow.com/questions/5963269/how-to-make-a -great-r-repearable-Beispiel # answer-5963610) und bearbeiten Sie Ihren Beitrag entsprechend. Das heißt, Eingabedaten (dummy oder real) bereitstellen und den Code auf die Zeilen reduzieren, die Teil des Problems sind (z. B. prob ist ggplot, speichert kein jpeg). – lukeA

Antwort

4

Sie können den Bereich einer Achse beheben, indem Sie die limits Parametereinstellung:

library(ggplot2) 
lst <- list(
    data.frame(x = 1:100, y=runif(100, 0, 10)), 
    data.frame(x = 1:100, y=runif(100, 0, 100)) 
) 
ylim <- range(do.call(c, lapply(lst, "[[", "y"))) 
for (x in seq(lst)) { 
    print(ggplot(lst[[x]], aes(x, y)) + geom_point() + scale_y_continuous(limits=ylim)) 
} 

oder durch +ylim(ylim) statt +scale_y_continuous(limits=ylim) Zugabe (über @DeveauP).

+0

Wenn es Grenzen zu setzen ist, können 'xlim' oder' ylim' Funktionen geeigneter sein als 'scale_y_continuous'. – DeveauP

+0

Richtig, fügte hinzu, dass. Danke! – lukeA

+0

Ich ging mit 'gganimate'-Paket. funktioniert wirklich gut. – kbrunner

Verwandte Themen