使用动画可以使得图形更形象,更能反映数据的变化
1.安装环境gganimate
1 if(!require(devtools)) install.packages("devtools") 2 devtools::install_github("dgrtwo/gganimate") 3 #需要注意的是这个包依赖于ImageMagick来产生动画,所以还需要安装ImageMagick 4 install.packages("installr") 5 installr::install.ImageMagick("http://www.imagemagick.org/script/download.php") 6 #在安装该软件的过程中,有一个页面全部打钩,否则动画无法找到可执行文件
2.加载包
1 library(readr) 2 library(dplyr) 3 library(DT) 4 library(maps) 5 library(ggplot2) 6 library(ggthemes) 7 library(tibble) 8 library(lubridate) 9 library(tidyr) 10 library(gganimate)
3.加载数据集
1 url_csv <- 'https://raw.githubusercontent.com/d4tagirl/R-Ladies-growth-maps/master/rladies.csv' 2 rladies <- read_csv(url(url_csv))%>% 3 select(-1) 4 datatable(rladies, rownames = FALSE, 5 options = list(pageLength = 5))
结论:该数据集是Rladies数据集,是一个全球女权组织的社区,主要改变性别歧视
主要字段:screen_name 社区名称
location 地点
created_at 创建时间
follower 追随人数
age_days 到目前的时间(2017-05-16)
lon 社区的经度
lat 社区的纬度
4.静态图形
1 # 加载世界地图 2 world <- ggplot() + 3 borders('world',color='gray85',fill='gray80')+ 4 theme_map() 5 6 # 将每个社区作为点加载到地图上 7 map <- world + 8 geom_point(aes(x=lon,y=lat,size=followers),data=rladies,colour='purple',alpha=.5)+ 9 scale_size_continuous(range=c(1,8),breaks=c(250,500,750,1000))+ 10 labs(size='Followers')
结论:可以看出美国和欧洲的女权社区很多
5.创建动态图形(展示每一个月的变化)
#使用tibble创建开始日期和起始点的数据,tribble是data.frame的替代 ghost_points_ini <- tibble( created_at = as.Date('2011-09-11'), followers=0,lon=0,lat=0 ) # 使用tibble创建结束日期和终止点的数据 ghost_points_fin <- tibble( created_at=seq(as.Date('2017-05-16'), as.Date('2017-05-30'), by='days'), followers=0,lon=0,lat=0 ) # gganimate 需要指定frame作为参数, # cumulative 为T表示 map <- world + geom_point(aes(x=lon,y=lat,size=followers, frame=created_at,cumulative=T), data=rladies,color='purple',alpha=.5)+ geom_point(aes(x=lon,y=lat,size=followers, frame=created_at,cumulative=T), data=ghost_points_ini,color='purple',alpha=0)+ geom_point(aes(x=lon,y=lat,size=followers, frame=created_at,cumulativte=T), data=ghost_points_fin,color='purple',alpha=0)+ scale_size_continuous(range=c(1,8),breaks=c(250,500,750,1000))+ labs(size='Followers') #开启动画 gganimate(map)
结论:可以知道女权社区起源于美国,慢慢向欧洲扩散,最后覆盖到拉丁美洲,此图还有修改的空间,圆点随着社区成立的时间而增大
6.修改动态图形
1 # 选择月份中展示的日期展示(1,10,20) 2 dates <- as_tibble(seq(floor_date(as.Date(min(rladies$created_at)), 3 unit = 'month'), 4 as.Date('2017-05-15'), 5 by='days')) %>% 6 filter(day(value) %in% c(1,10,20)) 7 8 # 创建新的数据集,只选择screen_name和date,同时根据时间计算用户的比例 9 rladies_frames <- rladies %>% 10 select(screen_name) %>% 11 expand(screen_name,date=dates$value) %>% 12 right_join(rladies,by='screen_name') %>% 13 filter(date > created_at) %>% 14 mutate(age_total=as.numeric(age_days,units='days'), 15 age_at_date= as.numeric(difftime(date,created_at,units = 'days'), 16 units = 'days'), 17 est_followers=((followers-1)/age_total)*age_at_date) 18 19 ghost_points_ini2 <- ghost_points_ini %>% 20 mutate(date=created_at,est_followers = 0) 21 22 ghost_points_fin2 <- ghost_points_fin %>% 23 expand(date=created_at,rladies) %>% 24 select(date,est_followers=followers,lon,lat) 25 26 map_frames <- world + 27 geom_point(aes(x=lon,y=lat,size=est_followers,frame=date), 28 data=rladies_frames,colour='purple',alpha=.5)+ 29 geom_point(aes(x=lon,y=lat,size=est_followers,frame=date), 30 data = ghost_points_ini2,alpha=0)+ 31 geom_point(aes(x=lon,y=lat,size=est_followers,frame=date), 32 data = ghost_points_fin2,colour='purple',alpha=.5)+ 33 scale_size_continuous(range=c(1,8),breaks=c(250,500,750,1000))+ 34 labs(size='Followers') 35 36 gganimate(map_frames)
结论:可以看出全球女权社区不断地壮大的过程
2012~2016年女权社区处于起步的状态,集中在美国,
2016~2017年开始向欧洲发展,2017年欧洲的女权社区的规模超过美国
2017年之后女权社区王拉丁美洲开始逐步的发展