2017-08-08 16 views
6

Tôi đang cố thêm tiêu đề năm vào lô từ tập dữ liệu đã được chạy qua tweenr. Làm theo tấm gương từ revolutionanalytics.comTiêu đề bản đồ khi sử dụng gganimate với tweenr

library(tidyverse) 
library(tweenr) 
library(gapminder) 

gapminder_edit <- gapminder %>% 
    arrange(country, year) %>% 
    select(gdpPercap,lifeExp,year,country, continent, pop) %>% 
    rename(x=gdpPercap,y=lifeExp,time=year,id=country) %>% 
    mutate(ease="linear") 

gapminder_tween <- tween_elements(gapminder_edit, 
           "time", "id", "ease", nframes = 150) %>% 
    mutate(year = round(time), country = .group) %>% 
    left_join(gapminder, by=c("country","year","continent")) %>% 
    rename(population = pop.x) 

gapminder_tween %>% arrange(country, .frame) %>% head() 
#   x  y  time continent population .frame  .group year  country lifeExp pop.y gdpPercap 
# 1 779.4453 28.80100 1952.000  Asia 8425333  0 Afghanistan 1952 Afghanistan 28.801 8425333 779.4453 
# 2 781.7457 28.88606 1952.278  Asia 8470644  1 Afghanistan 1952 Afghanistan 28.801 8425333 779.4453 
# 3 784.0462 28.97111 1952.556  Asia 8515955  2 Afghanistan 1953 Afghanistan  NA  NA  NA 
# 4 786.3466 29.05617 1952.833  Asia 8561267  3 Afghanistan 1953 Afghanistan  NA  NA  NA 
# 5 788.6470 29.14122 1953.111  Asia 8606578  4 Afghanistan 1953 Afghanistan  NA  NA  NA 
# 6 790.9475 29.22628 1953.389  Asia 8651889  5 Afghanistan 1953 Afghanistan  NA  NA  NA 

Để tạo gif tôi có thể sử dụng các tiêu đề khung (một chút vô nghĩa) và thiết lập title_frame = TRUE (mặc định) trong gganimate chức năng ..

library(gganimate) 
library(animation) 
p2 <- ggplot(gapminder_tween, 
      aes(x=x, y=y, frame = .frame)) + 
    geom_point(aes(size=population, color=continent),alpha=0.8) + 
    xlab("GDP per capita") + 
    ylab("Life expectancy at birth") + 
    scale_x_log10() 

magickPath <- shortPathName("C:\\Program Files\\ImageMagick-7.0.6-Q16\\magick.exe") 
gganimate(p2, ani.options = ani.options(convert=magickPath), interval = 0.1) 

enter image description here

Tôi cố gắng sử dụng cột năm (frame = year trong tính thẩm mỹ lập bản đồ), nhưng điều này chỉ tạo ra 56 khung hình và điểm xuất hiện nhiều lần trong mỗi khung hình.

p2 <- ggplot(gapminder_tween, 
      aes(x=x, y=y, frame = year)) + 
    geom_point(aes(size=population, color=continent),alpha=0.8) + 
    xlab("GDP per capita") + 
    ylab("Life expectancy at birth") + 
    scale_x_log10() 

enter image description here

I (và nếu như vậy, làm thế nào) có gif đầu tiên với tiêu đề cho mỗi khung tương ứng với các giá trị tương ứng của year trong khung dữ liệu tween'ed Can?

Trả lời

3

Tôi đã sửa đổi chức năng gg_animate giới thiệu khả năng tùy chỉnh tiêu đề cốt truyện bằng cách sử dụng tính thẩm mỹ ttl.
Tải xuống tệp here và lưu tệp đó vào thư mục làm việc của bạn với tên mygg_animate.r.
Sau đó, chạy đoạn mã sau:

library(tidyverse) 
library(tweenr) 
library(gapminder) 

gapminder_edit <- gapminder %>% 
    arrange(country, year) %>% 
    select(gdpPercap,lifeExp,year,country, continent, pop) %>% 
    rename(x=gdpPercap,y=lifeExp,time=year,id=country) %>% 
    mutate(ease="linear") 

gapminder_tween <- tween_elements(gapminder_edit, 
           "time", "id", "ease", nframes = 200) %>% 
    mutate(year = round(time), country = .group) %>% 
    left_join(gapminder, by=c("country","year","continent")) %>% 
    rename(population = pop.x) 

library(gganimate) 
library(animation) 
source("mygg_animate.r") 

# Define plot titles using the new aesthetic 
p2 <- ggplot(gapminder_tween, 
      aes(x=x, y=y, frame=.frame, ttl=year)) + 
    geom_point(aes(size=population, color=continent),alpha=0.8) + 
    xlab("GDP per capita") + 
    ylab("Life expectancy at birth") + 
    scale_x_log10() 

magickPath <- shortPathName("C:\\Program Files\\ImageMagick-7.0.6-Q16\\magick.exe") 

mygg_animate(p2, ani.options = ani.options(convert=magickPath), 
    interval = 0.1, title_frame=T) 

Bên dưới biểu đồ hoạt hình kết quả (chuỗi thời gian đã được cắt ngắn để giảm kích thước của file gif).

enter image description here

Các vấn đề liên quan