สร้างฮิสโตแกรมแบบเคลื่อนไหวโดยใช้ R

สร้างฮิสโตแกรมแบบเคลื่อนไหวโดยใช้ R

แผนภูมิแท่งแบบเคลื่อนไหวที่สามารถฝังลงในโพสต์บนเว็บไซต์ใดๆ ได้โดยตรงกำลังได้รับความนิยมเพิ่มมากขึ้น พวกมันแสดงพลวัตของการเปลี่ยนแปลงในลักษณะใด ๆ ในช่วงเวลาหนึ่งและทำสิ่งนี้ได้อย่างชัดเจน มาดูวิธีสร้างมันโดยใช้ R และแพ็คเกจทั่วไป

Skillbox แนะนำ: หลักสูตรภาคปฏิบัติ "นักพัฒนา Python ตั้งแต่เริ่มต้น".

เราเตือนคุณ: สำหรับผู้อ่าน "Habr" ทุกคน - ส่วนลด 10 rubles เมื่อลงทะเบียนในหลักสูตร Skillbox ใด ๆ โดยใช้รหัสส่งเสริมการขาย "Habr"

แพคเกจ

เราต้องการแพ็คเกจใน R:

สองสิ่งนี้มีความจำเป็นอย่างยิ่ง นอกจากนี้ จำเป็นต้องมี tidyverse ภารโรง และเครื่องชั่งเพื่อจัดการข้อมูล ทำความสะอาดอาร์เรย์ และจัดรูปแบบตามนั้น

ข้อมูล

ชุดข้อมูลดั้งเดิมที่เราจะใช้ในโครงการนี้ดาวน์โหลดได้จากเว็บไซต์ธนาคารโลก นี่พวกเขา- ข้อมูลธนาคารโลก. สามารถดาวน์โหลดข้อมูลเดียวกันนี้ได้หากคุณต้องการข้อมูลสำเร็จรูป โฟลเดอร์โครงการ.

นี่เป็นข้อมูลประเภทใด? กลุ่มตัวอย่างประกอบด้วยมูลค่า GDP ของประเทศส่วนใหญ่เป็นเวลาหลายปี (ตั้งแต่ปี 2000 ถึง 2017)

การประมวลผลข้อมูล

เราจะใช้โค้ดที่โพสต์ด้านล่างเพื่อเตรียมรูปแบบข้อมูลที่จำเป็น เราล้างชื่อคอลัมน์ เปลี่ยนตัวเลขเป็นรูปแบบตัวเลข และแปลงข้อมูลโดยใช้ฟังก์ชันรวบรวม() เราบันทึกทุกอย่างที่ได้รับใน gdp_tidy.csv เพื่อการใช้งานต่อไป

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

ฮิสโตแกรมแบบเคลื่อนไหว

การสร้างของพวกเขาต้องใช้สองขั้นตอน:

  • พล็อตฮิสโตแกรมจริงชุดสมบูรณ์โดยใช้ ggplot2
  • สร้างฮิสโตแกรมแบบคงที่ให้เคลื่อนไหวด้วยพารามิเตอร์ที่ต้องการโดยใช้ gganimate

ขั้นตอนสุดท้ายคือการแสดงภาพเคลื่อนไหวในรูปแบบที่ต้องการ รวมถึง GIF หรือ MP4

กำลังโหลดไลบรารี

  • ห้องสมุด(tidyverse)
  • ห้องสมุด(gganimate)

การจัดการข้อมูล

ในขั้นตอนนี้ คุณจะต้องกรองข้อมูลเพื่อให้ได้ประเทศ 10 อันดับแรกในแต่ละปี มาเพิ่มหลายคอลัมน์ที่จะทำให้เราสามารถแสดงคำอธิบายสำหรับฮิสโตแกรมได้

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

การสร้างฮิสโตแกรมแบบคงที่

ตอนนี้เรามีแพ็คเกจข้อมูลในรูปแบบที่ต้องการแล้ว เราก็เริ่มวาดฮิสโตแกรมแบบคงที่ ข้อมูลพื้นฐาน - 10 ประเทศที่มี GDP สูงสุดในช่วงเวลาที่เลือก เราสร้างกราฟสำหรับแต่ละปี

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

การแสดงผล

เมื่อสร้างภาพเคลื่อนไหวและจัดเก็บไว้ในออบเจ็กต์ภาพเคลื่อนไหวแล้ว ก็ถึงเวลาเรนเดอร์โดยใช้ฟังก์ชัน animate() ตัวเรนเดอร์ที่ใช้ใน animate() อาจแตกต่างกันไป ขึ้นอยู่กับประเภทของไฟล์เอาท์พุตที่ต้องการ

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 )

ผล

สร้างฮิสโตแกรมแบบเคลื่อนไหวโดยใช้ R

อย่างที่คุณเห็นไม่มีอะไรซับซ้อน มีโครงการทั้งหมดอยู่ที่ GitHub ของฉันคุณสามารถใช้มันได้ตามที่เห็นสมควร

Skillbox แนะนำ:

ที่มา: will.com

เพิ่มความคิดเห็น