Ṣẹda awọn Histogram ti ere idaraya Lilo R

Ṣẹda awọn Histogram ti ere idaraya Lilo R

Awọn shatti igi ere idaraya ti o le wa ni ifibọ taara sinu ifiweranṣẹ lori oju opo wẹẹbu eyikeyi n di olokiki pupọ si. Wọn ṣe afihan awọn iyipada ti awọn ayipada ni eyikeyi awọn abuda ni akoko kan ati ṣe eyi ni kedere. Jẹ ki a wo bii o ṣe le ṣẹda wọn nipa lilo R ati awọn idii jeneriki.

Skillbox ṣe iṣeduro: Ilana ti o wulo "Olùgbéejáde Python lati ibere".

A leti: fun gbogbo awọn oluka ti "Habr" - ẹdinwo ti 10 rubles nigbati o forukọsilẹ ni eyikeyi iṣẹ-ẹkọ Skillbox nipa lilo koodu ipolowo “Habr”.

Awọn akopọ

A nilo awọn idii ni R:

Awọn wọnyi meji ni o wa lalailopinpin pataki. Ni afikun, tidyverse, janitor ati awọn irẹjẹ yoo nilo lati ṣakoso data naa, nu titobi ati ọna kika ni ibamu.

Data

Eto data atilẹba ti a yoo lo ninu iṣẹ akanṣe yii jẹ igbasilẹ lati oju opo wẹẹbu Banki Agbaye. Nibi ti won wa - WorldBank Data. Data kanna, ti o ba nilo ti o ti ṣetan, le ṣe igbasilẹ lati awọn folda ise agbese.

Iru alaye wo ni eyi? Apeere naa ni iye GDP ti ọpọlọpọ awọn orilẹ-ede fun ọpọlọpọ ọdun (lati ọdun 2000 si 2017).

Ṣiṣe data

A yoo lo koodu ti a fiweranṣẹ ni isalẹ lati ṣeto ọna kika data ti a beere. A ko awọn orukọ iwe, yi awọn nọmba sinu ọna kika nọmba, ati iyipada data nipa lilo iṣẹ apejọ (). A fipamọ ohun gbogbo ti o gba ni gdp_tidy.csv fun lilo siwaju sii.

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

Awọn histogram ti ere idaraya

Ṣiṣẹda wọn nilo awọn ipele meji:

  • Ṣiṣeto eto pipe ti awọn histogram gangan ni lilo ggplot2.
  • Animate histograms aimi pẹlu awọn aye ti o fẹ nipa lilo ganimate.

Igbesẹ ikẹhin ni lati ṣe ere idaraya ni ọna kika ti o fẹ, pẹlu GIF tabi MP4.

Awọn ile-ikawe ikojọpọ

  • ile-ikawe (tidyverse)
  • ile-ikawe (ganimate)

Isakoso data

Ni igbesẹ yii, o nilo lati ṣe àlẹmọ data lati gba awọn orilẹ-ede 10 ti o ga julọ fun ọdun kọọkan. Jẹ ki a ṣafikun ọpọlọpọ awọn ọwọn ti yoo gba wa laaye lati ṣafihan arosọ kan fun 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()

Ilé aimi histograms

Ni bayi ti a ni package data ni ọna kika ti a beere, a bẹrẹ iyaworan awọn histogram aimi. Alaye ipilẹ - awọn orilẹ-ede 10 oke pẹlu GDP ti o pọju fun aarin akoko ti o yan. A ṣẹda awọn aworan fun ọdun kọọkan.

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

Ṣiṣẹda awọn igbero lilo ggplot2 rọrun pupọ. Gẹgẹbi o ti le rii ni apakan koodu loke, awọn aaye bọtini pupọ wa pẹlu iṣẹ akori (). Wọn jẹ pataki ki gbogbo awọn eroja ṣe igbesi aye laisi awọn iṣoro. Diẹ ninu wọn le ma ṣe afihan ti o ba jẹ dandan. Apeere: Awọn laini akoj inaro nikan ati awọn arosọ ni a fa, ṣugbọn awọn akọle ipo ati ọpọlọpọ awọn paati miiran ni a yọkuro lati agbegbe naa.

iwara

Awọn bọtini iṣẹ nibi ni transition_states (), o stitches papo lọtọ aimi awọn aworan. view_follow () ti lo lati fa awọn ila akoj.

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

Ni kete ti a ti ṣẹda iwara ati fipamọ sinu ohun idanilaraya, o to akoko lati mu ṣiṣẹ ni lilo iṣẹ animate (). Oluṣe ti a lo ninu animate() le yatọ si da lori iru faili ti o wu jade ti o nilo.

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 )

Esi

Ṣẹda awọn Histogram ti ere idaraya Lilo R

Bi o ti le ri, ko si ohun idiju. Gbogbo ise agbese wa ninu GitHub mi, o le lo bi o ṣe rii pe o yẹ.

Skillbox ṣe iṣeduro:

orisun: www.habr.com

Fi ọrọìwòye kun