
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 .
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:
- ggplot2
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ą - . Te same dane, jeśli potrzebujesz gotowych, można pobrać z .
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)
PKB <- read_csv("./data/GDP_Data.csv")
#wybierz wymagane kolumny
pkb <- pkb %>% wybierz(3:15)
#filtruj tylko wiersze kraju
PKB <- PKB[1:217,]
gdp_tidy <- gdp %>%
mutate_at(vars(zawiera("YR")),as.numeric) %>%
zbierz(rok,wartość,3:13) %>%
dozorca::clean_names() %>%
zmutuj(rok = as.numeric(stringr::str_sub(rok,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 %>%
grupuj_według(rok) %>%
# * 1 umożliwia posiadanie niecałkowitych rang podczas przesuwania
mutuj(ranga = ranga(--wartość),
Value_rel = wartość/wartość[rank==1],
Wartość_lbl = wklej0(" ",zaokrągl(wartość/1e9))) %>%
group_by(nazwa_kraju) %>%
filtruj(rank <=10) %>%
rozgrupuj()
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(animacja, 200, fps = 20, szerokość = 1200, wysokość = 1000,
renderer = gifski_renderer("gganim.gif"))
MP4
# For MP4
animate(animacja, 200, fps = 20, szerokość = 1200, wysokość = 1000,
renderer = ffmpeg_renderer()) -> for_mp4
anim_save("animacja.mp4", animacja = for_mp4 )
Doświadcz mocnych i skutecznych rezultatów

Jak widać nic skomplikowanego. Cały projekt dostępny jest w , możesz go używać według własnego uznania.
Skillbox poleca:
- Dwuletni kurs praktyczny .
- Kurs online .
- Praktyczny roczny kurs .
Źródło: www.habr.com
