2016-03-01 12 views
7

Ho guardato con invidia e ammirazione le varie animazioni ggplot che appaiono su Twitter da quando David Robinson ha pubblicato il suo pacchetto di gganimi e ho pensato che avrei avuto un gioco da solo. Sto riscontrando un problema con gganimate quando utilizzo geom_bar. Si spera che il seguente esempio dimostri il problema.problema gganimate con geom_bar?

Prima di generare alcuni dati per un esempio riproducibile:

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

Per dimostrare quello che sto cercando di fare ho pensato che sarebbe stato utile per tracciare un ggplot ordinaria, sfaccettato da z. Sto cercando di far gganimare per produrre una gif che cicli tra questi due grafici.

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

facetted_barchart

Ma quando uso gganimate la trama per B si comporta in modo strano. Nel secondo fotogramma le barre iniziano con i valori a cui le prime barre del fotogramma finiscono, invece di partire all'origine. Come se fosse un grafico a barre in pila.

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

bars_animation

inciso quando si cerca la stessa trama con geom_point tutto funziona come previsto.

Ho provato a pubblicare alcune immagini, ma a quanto pare non ho una reputazione sufficiente, quindi spero che abbia senso senza di loro. È un bug o manco qualcosa?

Grazie in anticipo,

Thomas

risposta

10

La ragione è che senza sfaccettatura, le barre vengono impilati. Utilizzare 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

Al fine di evitare confusione in situazioni come questa, è molto più utile sostituire frame da fill (o colour, a seconda del geom si sta using`):

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

enter image description here

Le due trame che sono disegnati, quando si sostituisce fill per frame corrispondono esattamente a in modo esclusivo disegnando uno dei colori alla volta.

+0

Grazie, ha senso! – tecb1234