Jieun Animated Histograms Ngagunakeun R

Jieun Animated Histograms Ngagunakeun R

Bagan bar animasi anu tiasa diselapkeun langsung kana tulisan dina situs wéb mana waé janten beuki populer. Aranjeunna ningalikeun dinamika parobahan dina ciri naon waé dina waktos anu tangtu sareng ngalakukeun ieu sacara jelas. Hayu urang tingali kumaha nyiptakeunana nganggo R sareng pakét generik.

Skillbox nyarankeun: Kursus praktis "Pamekar Python ti mimiti".

Kami ngingetan: pikeun sakabéh pamiarsa "Habr" - diskon 10 rubles nalika enrolling dina sagala Tangtu Skillbox ngagunakeun "Habr" kode promosi.

Pakét

Urang peryogi pakét dina basa Sunda:

Dua ieu kacida diperlukeun. Salaku tambahan, tidyverse, janitor sareng timbangan bakal diperyogikeun pikeun ngatur data, ngabersihan susunan sareng pormat anu sasuai.

data

Dataset asli anu bakal kami anggo dina proyék ieu diunduh tina situs wéb Bank Dunia. Di dieu aranjeunna - Data WorldBank. Data anu sami, upami anjeun peryogi siap-siap, tiasa diunduh tina polder proyék.

Jenis informasi ieu? Sampel ngandung nilai GDP kalolobaan nagara pikeun sababaraha taun (ti 2000 nepi ka 2017).

Ngolah data

Kami bakal nganggo kode anu dipasang di handap pikeun nyiapkeun format data anu diperyogikeun. Urang ngabersihan ngaran kolom, ngarobah angka kana format angka, sarta ngarobah data ngagunakeun ngumpulkeun () fungsi. Urang nyimpen sagalana nu narima di gdp_tidy.csv pikeun pamakéan salajengna.

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")

Histograms animasi

Kreasi maranéhanana merlukeun dua tahap:

  • Plotting set lengkep histograms sabenerna maké ggplot2.
  • Hirupkeun histogram statik sareng parameter anu dipikahoyong nganggo gganimate.

Léngkah ahir nyaéta ngadamel animasi dina format anu dipikahoyong, kalebet GIF atanapi MP4.

Ngamuat perpustakaan

  • perpustakaan (rapi)
  • perpustakaan (ganimate)

Manajemén data

Dina léngkah ieu, anjeun kedah nyaring data pikeun kéngingkeun 10 nagara anu paling luhur unggal taun. Hayu urang tambahkeun sababaraha kolom anu ngamungkinkeun urang pikeun nampilkeun legenda pikeun histogram.

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()

Ngawangun histogram statik

Ayeuna urang gaduh pakét data dina format anu diperyogikeun, urang ngawitan ngagambar histogram statik. Inpormasi dasar - 10 nagara paling luhur kalayan GDP maksimal pikeun interval waktos anu dipilih. Urang nyieun grafik pikeun tiap taun.

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"))

Nyiptakeun plot nganggo ggplot2 saderhana pisan. Sakumaha anjeun tiasa tingali dina bagian kode di luhur, aya sababaraha titik konci kalayan fungsi téma (). Éta dipikabutuh pikeun sakabéh elemen ngahirupkeun tanpa masalah. Sababaraha di antarana bisa jadi teu dipintonkeun lamun perlu. Conto: Ngan garis grid nangtung sareng legenda anu digambar, tapi judul sumbu sareng sababaraha komponén sanésna dipiceun tina daérah éta.

animasi

Fungsi konci didieu nyaeta transition_states (), eta jahitan babarengan grafik statik misah. view_follow () dipaké pikeun ngagambar garis grid.

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")

Rendering

Sakali animasi dijieun tur disimpen dina obyék anim, éta waktu pikeun ngajadikeun eta ngagunakeun animasi () fungsi. The renderer dipaké dina ngahirupkeun () bisa jadi béda gumantung kana jenis file kaluaran diperlukeun.

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 )

hasil

Jieun Animated Histograms Ngagunakeun R

Sakumaha anjeun tiasa tingali, euweuh pajeulit. Sakabéh proyék sadia dina abdi GitHub, anjeun tiasa nganggo sakumaha anu anjeun pikahoyong.

Skillbox nyarankeun:

sumber: www.habr.com

Tambahkeun komentar