2016-03-01 14 views
7

Ich habe mit Neid und Bewunderung über die verschiedenen ggplot-Animationen auf Twitter geschaut, seit David Robinson sein gganitimes Paket veröffentlicht hat und dachte, dass ich selbst spielen würde. Ich habe ein Problem mit gganimate, wenn ich geom_bar verwende. Hoffentlich zeigt das folgende Beispiel das Problem.gganate Ausgabe mit geom_bar?

zunächst einige Daten für ein reproduzierbares Beispiel zu erzeugen:

df <- data.frame(x = c(1, 2, 1, 2), 
       y = c(1, 2, 3, 4), 
       z = c("A", "A", "B", "B")) 

Um zu zeigen, was ich versuche zu tun, dachte ich, es wäre nützlich, einen gewöhnlichen ggplot, von z facettiert plotten. Ich versuche ein GIF zu erstellen, das zwischen diesen beiden Plots zirkuliert.

ggplot(df, aes(x = x, y = y)) + 
    geom_bar(stat = "Identity") + 
    facet_grid(~z) 

facetted_barchart

Aber wenn ich verhält sich seltsam gganimate die Handlung für B verwenden. Im zweiten Rahmen beginnen die Balken bei den Werten, bei denen die Balken des ersten Rahmens enden, und nicht beim Ursprung. Als ob es ein gestapeltes Balkendiagramm wäre.

p <- ggplot(df, aes(x = x, y = y, frame = z)) + 
    geom_bar(stat = "Identity") 
gg_animate(p) 

bars_animation

Nebenbei bemerkt, wenn die gleiche Handlung versucht, mit geom_point alles wie erwartet funktioniert.

Ich habe versucht, einige Bilder zu posten, aber anscheinend habe ich keinen ausreichenden Ruf, also hoffe ich, dass es ohne sie Sinn macht. Ist das ein Fehler, oder fehlt mir etwas?

Vielen Dank im Voraus,

Thomas

Antwort

10

Der Grund dafür ist, dass ohne Facettierung werden die Stäbe gestapelt. Verwenden Sie position = "identity":

p <- ggplot(df, aes(x = x, y = y, frame = z)) + 
    geom_bar(stat = "Identity", position = "identity") 
gg_animate(p) 

enter image description here

Um Verwirrung in Situationen wie diese zu vermeiden, ist es viel nützlicher frame von fill zu ersetzen (oder colour je nach geom Sie using`):

p <- ggplot(df, aes(x = x, y = y, fill = z)) + 
    geom_bar(stat = "Identity") 
p 

enter image description here

Die beiden Plots, dass gezeichnet werden, wenn Sie ersetzen fill von frame entsprechen genau ausschließlich Zeichnen einer der Farben zu einer Zeit.

+0

Danke, das macht Sinn! – tecb1234

Verwandte Themen