
Τα κινούμενα γραφήματα ράβδων που μπορούν να ενσωματωθούν απευθείας σε μια ανάρτηση σε οποιονδήποτε ιστότοπο γίνονται όλο και πιο δημοφιλή. Εμφανίζουν τη δυναμική των αλλαγών σε οποιαδήποτε χαρακτηριστικά σε ένα συγκεκριμένο χρονικό διάστημα και το κάνουν ξεκάθαρα. Ας δούμε πώς να τα δημιουργήσετε χρησιμοποιώντας R και γενικά πακέτα.
Το Skillbox προτείνει: Πρακτικό μάθημα .
Υπενθύμιση: για όλους τους αναγνώστες του "Habr" - έκπτωση 10 ρούβλια κατά την εγγραφή σε οποιοδήποτε μάθημα Skillbox χρησιμοποιώντας τον κωδικό προσφοράς "Habr".
Πακέτα
Χρειαζόμαστε πακέτα σε R:
- ggplot2
Αυτά τα δύο είναι εξαιρετικά απαραίτητα. Επιπλέον, θα χρειαστούν τακτοποίηση, θυρωρός και ζυγαριά για τη διαχείριση των δεδομένων, τον καθαρισμό της συστοιχίας και τη διαμόρφωση ανάλογα.
Δεδομένα
Το αρχικό σύνολο δεδομένων που θα χρησιμοποιήσουμε σε αυτό το έργο έχει ληφθεί από τον ιστότοπο της Παγκόσμιας Τράπεζας. Εδώ είναι - . Τα ίδια δεδομένα, αν τα χρειάζεστε έτοιμα, μπορείτε να τα κατεβάσετε από .
Τι είδους πληροφορίες είναι αυτές; Το δείγμα περιέχει την αξία του ΑΕΠ των περισσότερων χωρών για αρκετά χρόνια (από το 2000 έως το 2017).
Επεξεργασία δεδομένων
Θα χρησιμοποιήσουμε τον κωδικό που δημοσιεύεται παρακάτω για να προετοιμάσουμε την απαιτούμενη μορφή δεδομένων. Διαγράφουμε τα ονόματα των στηλών, μετατρέπουμε τους αριθμούς σε μορφή αριθμού και μετατρέπουμε τα δεδομένα χρησιμοποιώντας τη συνάρτηση collect(). Αποθηκεύουμε ό,τι λαμβάνεται στο gdp_tidy.csv για περαιτέρω χρήση.
library(tidyverse)
library(janitor)
αεο <- read_csv("./data/GDP_Data.csv")
#επιλέξτε απαιτούμενες στήλες
ΑΕΠ <- ΑΕΠ %>% επιλογή(3:15)
#φίλτρο μόνο σειρών χώρας
ακαθάριστο εγχώριο προϊόν <- ακαθάριστο εγχώριο προϊόν[1:217,]
gdp_tidy <- αΕΠ %>%
mutate_at(vars(περιέχει("YR")),as.numeric) %>%
συλλογή(έτος,τιμή,3:13) %>%
επιστάτης::clean_names() %>%
mutate(έτος = as.numeric(stringr::str_sub(έτος,1,4)))
write_csv(gdp_tidy,"./data/gdp_tidy.csv")
Κινούμενα ιστογράμματα
Η δημιουργία τους απαιτεί δύο στάδια:
- Σχεδιάζοντας ένα πλήρες σύνολο πραγματικών ιστογραμμάτων χρησιμοποιώντας το ggplot2.
- Ζητήστε στατικά ιστογράμματα με τις επιθυμητές παραμέτρους χρησιμοποιώντας το gganimate.
Το τελευταίο βήμα είναι να αποδώσετε το κινούμενο σχέδιο στην επιθυμητή μορφή, συμπεριλαμβανομένου του GIF ή του MP4.
Φόρτωση βιβλιοθηκών
- βιβλιοθήκη (tidyverse)
- βιβλιοθήκη (gganimate)
Διαχείριση δεδομένων
Σε αυτό το βήμα, πρέπει να φιλτράρετε τα δεδομένα για να λάβετε τις 10 κορυφαίες χώρες για κάθε έτος. Ας προσθέσουμε πολλές στήλες που θα μας επιτρέψουν να εμφανίσουμε ένα υπόμνημα για το ιστόγραμμα.
gdp_tidy <- read_csv("./data/gdp_tidy.csv")
gdp_formatted <- gdp_tidy %>%
ομάδα_ανά(έτος) %>%
# Το * 1 καθιστά δυνατή την ύπαρξη μη ακέραιων τάξεων κατά την ολίσθηση
mutate(rank = rank(-value),
Value_rel = τιμή/τιμή[κατάταξη==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
ομάδα_κατά(όνομα_χώρας) %>%
φίλτρο(κατάταξη <=10) %>%
κατάργηση ομαδοποίησης()
Κατασκευή στατικών ιστογραμμάτων
Τώρα που έχουμε ένα πακέτο δεδομένων στην απαιτούμενη μορφή, αρχίζουμε να σχεδιάζουμε στατικά ιστογράμματα. Βασικές πληροφορίες - 10 κορυφαίες χώρες με μέγιστο ΑΕΠ για το επιλεγμένο χρονικό διάστημα. Δημιουργούμε γραφήματα για κάθε χρόνο.
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"))
Η δημιουργία σχεδίων χρησιμοποιώντας το ggplot2 είναι πολύ απλή. Όπως μπορείτε να δείτε στην ενότητα κώδικα παραπάνω, υπάρχουν πολλά βασικά σημεία με τη συνάρτηση theme(). Είναι απαραίτητα ώστε όλα τα στοιχεία να ζωντανεύουν χωρίς προβλήματα. Ορισμένα από αυτά ενδέχεται να μην εμφανίζονται εάν είναι απαραίτητο. Παράδειγμα: Σχεδιάζονται μόνο οι κάθετες γραμμές πλέγματος και οι μύθοι, αλλά οι τίτλοι των αξόνων και πολλά άλλα στοιχεία αφαιρούνται από την περιοχή.
εμψύχωση
Η βασική συνάρτηση εδώ είναι η transition_states(), συρράπτει ξεχωριστά στατικά γραφήματα. Η view_follow() χρησιμοποιείται για τη σχεδίαση γραμμών πλέγματος.
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")
Απόδοση
Μόλις δημιουργηθεί το animation και αποθηκευτεί στο αντικείμενο anim, είναι καιρός να το αποδώσουμε χρησιμοποιώντας τη συνάρτηση animate(). Ο renderer που χρησιμοποιείται στο animate() μπορεί να είναι διαφορετικός ανάλογα με τον τύπο του αρχείου εξόδου που απαιτείται.
GIF
# For GIF
κίνηση(anim, 200, fps = 20, πλάτος = 1200, ύψος = 1000,
απόδοση = gifski_renderer("gganim.gif"))
MP4
# For MP4
κίνηση(anim, 200, fps = 20, πλάτος = 1200, ύψος = 1000,
απόδοση = ffmpeg_renderer()) -> for_mp4
anim_save("animation.mp4", animation = for_mp4)
Αποτέλεσμα

Όπως μπορείτε να δείτε, τίποτα περίπλοκο. Ολόκληρο το έργο είναι διαθέσιμο στο , μπορείτε να το χρησιμοποιήσετε όπως σας ταιριάζει.
Το Skillbox προτείνει:
- Πρακτικό μάθημα δύο ετών .
- Διαδικτυακό μάθημα .
- Πρακτικό μάθημα έτους .
Πηγή: www.habr.com
