Twórz animowane histogramy za pomocą R

Twórz animowane histogramy za pomocą R

Coraz większą popularnością cieszą się animowane wykresy słupkowe, które można osadzić bezpośrednio w poście na dowolnej stronie internetowej. Pokazują dynamikę zmian dowolnej cechy w określonym czasie i robią to wyraźnie. Zobaczmy, jak je utworzyć za pomocą języka R i pakietów ogólnych.

Skillbox poleca: Kurs praktyczny „Programista Pythona od zera”.

Przypomnienie: dla wszystkich czytelników „Habr” - rabat w wysokości 10 000 rubli przy zapisywaniu się na dowolny kurs Skillbox przy użyciu kodu promocyjnego „Habr”.

Pakiety

Potrzebujemy pakietów w R:

Te dwie rzeczy są niezwykle potrzebne. Ponadto do zarządzania danymi, czyszczenia tablicy i odpowiedniego formatowania potrzebne będą narzędzia tidyverse, woźny i waga.

Te

Oryginalny zbiór danych, którego będziemy używać w tym projekcie, zostanie pobrany ze strony internetowej Banku Światowego. Tutaj są - Dane Banku Światowego. Te same dane, jeśli potrzebujesz gotowych, można pobrać z foldery projektu.

Jakiego rodzaju są to informacje? Próba zawiera wartość PKB większości krajów za kilka lat (od 2000 r. do 2017 r.).

Przetwarzanie danych

Poniższy kod wykorzystamy do przygotowania wymaganego formatu danych. Usuwamy nazwy kolumn, zamieniamy liczby na format liczbowy i konwertujemy dane za pomocą funkcji zbierania(). Zapisujemy wszystko, co otrzymamy w gdp_tidy.csv do dalszego wykorzystania.

library(tidyverse)
library(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp <- gdp %>% select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy <- gdp %>%
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year,1,4)))

write_csv(gdp_tidy,"./data/gdp_tidy.csv")

Animowane histogramy

Ich powstanie wymaga dwóch etapów:

  • Wykreślanie pełnego zestawu rzeczywistych histogramów za pomocą ggplot2.
  • Animuj statyczne histogramy z pożądanymi parametrami za pomocą gganimate.

Ostatnim krokiem jest wyrenderowanie animacji w żądanym formacie, w tym GIF lub MP4.

Ładowanie bibliotek

  • biblioteka (porządek)
  • biblioteka (gganimate)

Zarządzanie danymi

Na tym etapie musisz przefiltrować dane, aby uzyskać 10 najlepszych krajów w każdym roku. Dodajmy kilka kolumn, które pozwolą nam wyświetlić legendę histogramu.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted <- gdp_tidy %>%
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank <=10) %>%
ungroup()

Budowanie statycznych histogramów

Teraz, gdy mamy pakiet danych w wymaganym formacie, zaczynamy rysować histogramy statyczne. Podstawowe informacje - 10 krajów z maksymalnym PKB w wybranym przedziale czasowym. Tworzymy wykresy na każdy rok.

staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))

Tworzenie wykresów za pomocą ggplot2 jest bardzo proste. Jak widać w powyższej sekcji kodu, funkcja motywu() ma kilka kluczowych punktów. Są one niezbędne, aby wszystkie elementy animowały się bez problemów. W razie potrzeby niektóre z nich mogą nie być wyświetlane. Przykład: Rysowane są tylko pionowe linie siatki i legendy, ale tytuły osi i kilka innych komponentów są usuwane z obszaru.

ożywienie

Kluczową funkcją jest tutaj transit_states(), która łączy ze sobą oddzielne statyczne wykresy. view_follow() służy do rysowania linii siatki.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")

Wykonanie

Gdy animacja zostanie utworzona i zapisana w obiekcie anim, czas ją wyrenderować za pomocą funkcji animate(). Mechanizm renderujący używany w animate() może się różnić w zależności od typu wymaganego pliku wyjściowego.

GIF

# For GIF

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))

MP4

# For MP4

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4

anim_save("animation.mp4", animation = for_mp4 )

Doświadcz mocnych i skutecznych rezultatów

Twórz animowane histogramy za pomocą R

Jak widać nic skomplikowanego. Cały projekt dostępny jest w mojego GitHuba, możesz go używać według własnego uznania.

Skillbox poleca:

Źródło: www.habr.com

Dodaj komentarz