2016-03-01 14 views
7

Tôi đã tìm kiếm với sự ghen tỵ và ngưỡng mộ tại các hình ảnh động khác nhau của ggplot xuất hiện trên twitter kể từ khi David Robinson phát hành gói gganimate của mình và nghĩ rằng tôi muốn có một vở kịch bản thân mình. Tôi gặp vấn đề với gganimate khi sử dụng geom_bar. Hy vọng ví dụ sau thể hiện vấn đề.vấn đề gganimate với geom_bar?

Đầu tiên tạo ra một số dữ liệu cho một ví dụ tái sản xuất:

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

Để chứng minh những gì tôi đang cố gắng để làm tôi nghĩ rằng nó sẽ hữu ích để vẽ một ggplot bình thường, facetted bởi z. Tôi đang cố gắng để có được gganimate để sản xuất một gif mà chu kỳ giữa 2 lô.

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

facetted_barchart

Nhưng khi tôi sử dụng gganimate cốt truyện cho B cư xử kỳ quặc. Trong khung thứ hai, các thanh bắt đầu tại các giá trị mà các thanh của khung đầu tiên kết thúc tại, thay vì bắt đầu từ gốc. Như thể nó là một biểu đồ thanh xếp chồng lên nhau.

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

bars_animation

Ngẫu nhiên khi cố gắng âm mưu cùng với geom_point mọi thứ hoạt động như mong đợi.

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

Tôi đã cố gắng đăng một số hình ảnh, nhưng dường như tôi không có đủ danh tiếng, vì vậy tôi hy vọng điều đó có ý nghĩa nếu không có chúng. Đây có phải là một lỗi, hoặc tôi đang thiếu một cái gì đó?

Cảm ơn trước,

Thomas

Trả lời

10

Lý do là không faceting, những quán bar được xếp chồng lên nhau. Sử dụng 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

Để tránh nhầm lẫn trong những tình huống như thế này, nó là nhiều hữu ích hơn để thay thế frame bởi fill (hoặc colour, tùy thuộc vào Geom bạn đang using`):

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

enter image description here

hai lô mà được vẽ, khi bạn thay thế fill bởi frame tương ứng chính xác thành độc quyền vẽ một trong các màu tại một thời điểm.

+0

Cảm ơn, điều đó có ý nghĩa! – tecb1234