2016-03-01 10 views
7

David Robinson kendi ganimet paketini yayınlamasından ve kendime ait bir oyun oynayacağımı düşündüğünden beri twitter'de görünen çeşitli ggplot animasyonlarında kıskançlık ve hayranlıkla bakıyordum. Geom_bar kullanırken gganimate ile ilgili bir sorun yaşıyorum. Umarım aşağıdaki örnek problemi gösterir.gganimate sorunu?

Önce bir tekrarlanabilir örneğin bazı verileri oluşturmak:

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

Ben o z tarafından yontulmuş sıradan ggplot, çizmek için yararlı olacağını düşündüm yapmaya çalışıyorum göstermek için. Bu 2 parselin arasındaki döngüleri bir gif üretmek için gganyan almaya çalışıyorum.

facetted_barchart

ggplot(df, aes(x = x, y = y)) + 
    geom_bar(stat = "Identity") + 
    facet_grid(~z) 
Ama B gganimate arsa kullandığınızda tuhaf davranır. İkinci çerçevede, çubuklar, başlangıçtaki çubuktan başlayarak değil, ilk çerçevenin çubuklarının tamamladığı değerlerle başlar. Yığılmış bir çubuk grafikmiş gibi. beklendiği gibi geom_point her şey çalışıyor ile aynı arsa çalışırken arada

bars_animation

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

.
q <- ggplot(df, aes(x = x, y = y, frame = z)) + 
    geom_point() 
gg_animate(q) 

bazı resimleri yayınlamak çalıştı, ama görünüşe göre yeterli itibar yok, bu yüzden onlar olmadan mantıklı umuyoruz. Bu bir hata mı, yoksa bir şeyi mi özlüyorum? peşin

sayesinde

Thomas

cevap

10

nedeni faceting olmadan, barlar yığılmış olmasıdır. position = "identity" kullan: Bu gibi durumlarda karışıklığı önlemek amacıyla

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

enter image description here

, (eğer using` olan geom bağlı veya colour) fill tarafından frame yerine çok daha yararlıdır:

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

enter image description here

iki parsel o frame tarafındanile değiştirdiğinizde, yalnızca bir seferde renklerden birini gösteren yalnızca karşılık gelir.

+0

Teşekkürler, bu mantıklı! – tecb1234