诺奖文章里面的动图绘制教程来了!!
作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。生信宝典对代码进行了系统测试和解释。
严涛老师的绘图教程还有:
ggplot2学习笔记之图形排列
R包ggseqlogo |绘制序列分析图
ggplot2高效实用指南 (可视化脚本、工具、套路、配色)
简介
R-Ladies是一个世界性的促进R语言社区性别多样性的组织,本文分析了这个组织的粉丝成员分布信息。
这篇文章主要基于d4tagirl,稍微有所修改。原文链接:
https://d4tagirl.com/2017/05/how-to-plot-animated-maps-with-gganimate
小编是用3.5.1版本的R重现以下过程的,gganimate包不能通过Tools——Install Pakages
来安装,而需要从github直接安装,下面的命令适用于我所遇到的问题。(gganimate有两个包,本文用到的是老的版本。2019年诺贝尔化学奖揭晓 |八一八,那些年的诺贝尔化学奖中用到的是新版本,用法不太一致,还请注意。)
devtools::install_github("dgrtwo/gganimate", ref = "v0.1.1”)
另外一个依赖的软件是imageMagick软件,这是一个需要单独下载并安装在PC或服务器端的图形编辑软件,下载地址:https://imagemagick.org/script/index.php,选择适合自己电脑系统的一个版本进行安装。推荐ImageMagick-6.9.10
版本,最新版存在与此R包的兼容性问题。gganimate的新版本不依赖于该软件。
注意:安装路径不要有中文和空格。
数据加载
# 加载包,若缺失则安装。
library(pacman)
p_load(tidyverse, gganimate, maps, ggthemes)
rladies <- read_csv(url("https://raw.githubusercontent.com/d4tagirl/R-Ladies-growth-maps/master/rladies.csv"))%>%select(-1)
head(rladies)## # A tibble: 6 x 7
## screen_name location created_at followers age_days lon lat
## <chr> <chr> <date> <int> <dbl> <dbl> <dbl>
## 1 RLadiesSF San Francis~ 2012-10-15 916 1673 -122 37.8
## 2 RLadiesNYC New York 2016-09-01 309 256 - 74.0 40.7
## 3 RLadiesIstanbul <U+0130>stanbul, T~ 2016-09-06 436 251 29.0 41.0
## 4 RLadiesBCN Barcelona, ~ 2016-10-11 377 216 2.17 41.4
## 5 RLadiesColumbus Columbus, OH 2016-10-04 179 223 - 83.0 40.0
## 6 RLadiesBoston Boston, MA 2016-09-06 259 251 - 71.1 42.4
可视化
主要是根据地理位置信息映射到地图上
# borders是map包中的函数,作用是获取地图信息和绘制地图
# 其它部分都是ggplot2的操作了
ggplot()+borders("world", color="gray85", fill="grey80")+geom_point(data = rladies, aes(lon, lat, size=followers), color="purple", alpha=0.5)+scale_size_continuous(range = c(8, 24), breaks = c(250, 500, 750, 1000))+labs(size="Followers", title=" The development of R-Ladies’ Twitter accounts",x=NULL,y=NULL)+theme(text = element_text(family = "Times New Roman", color = "#EEEEEE"), #这部分主题修改,自己尝试,应该有更简单的办法plot.title = element_text(size=40,color = "#f9ba00"),plot.subtitle = element_text(size=14),axis.ticks = element_blank(),axis.text = element_blank(),panel.grid = element_blank(),panel.background = element_rect(fill="#333333"),plot.background = element_rect(fill = "#333333"),legend.position = c(0.18,0.36),legend.background = element_blank(),legend.key = element_blank(),legend.text = element_text(size = 28),legend.title = element_text(size=28, color = "#f9ba00"))+annotate(geom = "text",label="Made by Logos ytlogos.github.io\nOriginally from d4tagirl https://d4tagirl.com",x=70, y=-55, size=10, family="Helvetica Black", color="#f9ba00", hjust="left")
动画展示
为了利用gganimate进行动态展示,需要构建一个映射变量:时间 (后面中的frame)。同时为了使得可视化开始呈现的是空白,结尾能继续保留展示一段时间,又构建了两个空白图层,就是下面2个数据表。
这里用的日期做的时间轴,其它数值变量或因子变量也都可以,注意根据需要修改。如果不是日期变量,不需要as.Date函数转换。
# 注意起始时间一定要早于、晚于真实数据中的时间。
# 每个时间生成一张图片,若有重名,会出现图片丢失,拼合出错。
ghost_points_ini <- tibble(created_at=as.Date("2011-09-01"), followers=0, lon=0, lat=0)
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)
添加frame映射, aes中的frame和cumulative不是ggplot2的标准美学参数,不被识别,会弹出warning,忽略就好。gganimate可以识别这两个,frame指定用哪一列做时间轴,每个时间轴会生成1张图片;cumulative表示累加,新的时间轴包含之前的数据。
注意下面3个geom_point用到的数据表不同。
map <- ggplot()+borders("world", color="gray85", fill="grey80")+# aes中的frame和cumulative不是ggplot2的标准美学参数,不被识别,会弹出warning,忽略就好# gganimate可以识别这两个,frame指定用哪一列做时间轴,每个时间轴会生成1张图片;# cumulative表示累加,新的时间轴包含之前的数据geom_point(data = rladies, aes(lon, lat, size=followers, frame=created_at, cumulative=TRUE), color="purple", alpha=0.5)+scale_size_continuous(range = c(4, 16), breaks = c(250, 500, 750, 1000))+# aes中的frame和cumulative不是ggplot2的标准美学参数,不被识别,会弹出warning,忽略就好# gganimate可以识别这两个,frame指定用哪一列做时间轴,每个时间轴会生成1张图片;# cumulative表示累加,新的时间轴包含之前的数据geom_point(data = ghost_points_ini, aes(lon, lat, size=followers, frame=created_at, cumulative=TRUE), alpha=0)+geom_point(data = ghost_points_fin, aes(lon, lat, size=followers, frame=created_at, cumulative=TRUE), alpha=0)+labs(size="Followers", title="The development of R-Ladies’ Twitter accounts",x=NULL,y=NULL)+theme(text = element_text(family = "Times New Roman", color = "#EEEEEE"),plot.title = element_text(size=28, color = "#f9ba00"),plot.subtitle = element_text(size=14),axis.ticks = element_blank(),axis.text = element_blank(),panel.grid = element_blank(),panel.background = element_rect(fill="#333333"),plot.background = element_rect(fill = "#333333"),legend.position = c(0.18,0.36),legend.background = element_blank(),legend.key = element_blank(),legend.text = element_text(size = 18),legend.title = element_text(size=24, color = "#f9ba00"))+annotate(geom = "text",label="Made by Logos ytlogos.github.io\nOriginally from d4tagirl https://d4tagirl.com",x=70, y=-55, size=6, family="Helvetica Black", color="#f9ba00", hjust="left")
animation::ani.options(interval=0.15, ani.width=1500, ani.height=800, units="in")
gganimate::gganimate(map, filename = "d4tagirlmap.gif")
SessionInfo
## R version 3.4.3 (2017-11-30)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 16299)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_China.936
## [2] LC_CTYPE=Chinese (Simplified)_China.936
## [3] LC_MONETARY=Chinese (Simplified)_China.936
## [4] LC_NUMERIC=C
## [5] LC_TIME=Chinese (Simplified)_China.936
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggthemes_3.4.0 maps_3.2.0 BiocInstaller_1.28.0
## [4] forcats_0.2.0 stringr_1.2.0 dplyr_0.7.4
## [7] purrr_0.2.4 readr_1.1.1 tidyr_0.8.0
## [10] tibble_1.4.2 ggplot2_2.2.1.9000 tidyverse_1.2.1
## [13] pacman_0.4.6
##
## loaded via a namespace (and not attached):
## [1] reshape2_1.4.3 haven_1.1.1 lattice_0.20-35
## [4] colorspace_1.3-2 htmltools_0.3.6 yaml_2.1.16
## [7] utf8_1.1.3 rlang_0.1.6 pillar_1.1.0
## [10] foreign_0.8-69 glue_1.2.0 modelr_0.1.1
## [13] readxl_1.0.0 bindrcpp_0.2 bindr_0.1
## [16] plyr_1.8.4 munsell_0.4.3 gtable_0.2.0
## [19] cellranger_1.1.0 rvest_0.3.2 psych_1.7.8
## [22] evaluate_0.10.1 labeling_0.3 knitr_1.19
## [25] parallel_3.4.3 broom_0.4.3 Rcpp_0.12.15
## [28] scales_0.5.0.9000 backports_1.1.2 jsonlite_1.5
## [31] mnormt_1.5-5 hms_0.4.1 digest_0.6.15
## [34] stringi_1.1.6 grid_3.4.3 rprojroot_1.3-2
## [37] cli_1.0.0 tools_3.4.3 magrittr_1.5
## [40] lazyeval_0.2.1 crayon_1.3.4 pkgconfig_2.0.1
## [43] xml2_1.2.0 lubridate_1.7.1 assertthat_0.2.0
## [46] rmarkdown_1.8 httr_1.3.1 rstudioapi_0.7
## [49] R6_2.2.2 nlme_3.1-131 compiler_3.4.3
诺奖文章里面的动图绘制教程来了!!相关推荐
- 相关性热图绘制教程(origin绘制,无须R语言)
相关性热图绘制教程(origin绘制!无需R语言) 相关性热图在很多文章中都有出现,一般都是使用R语言进行绘制.在origin中也可以进行同样的绘制,详细过程如下: 实例解读 这个数据是来源于R中的一 ...
- 动态箭头gif图标_GIF动图修改教程,超详细
大家好,我是阿牛,欢迎大家看我的文章,从今天开始,阿牛会给大家分享一些好玩的APP和各种电脑.手机.办公.学习等一些资源,希望大家支持. 一直有朋友看到喜欢的GIF动图想改上面的字,看到别人发的动图表 ...
- 思维导图怎么画?简单易学的思维导图绘制教程
思维导图怎么画?不少人希望通过思维导图来提高工作效率,学习成绩等,但是苦于不知道怎样绘制思维导图,只能眼睁睁的看着别人使用.那么今天小编就来为大家讲述怎样绘制思维导图的简单操作方法,希望可以带来帮助. ...
- 听说你们好奇我技术文章里的动图是怎么做的 ?
关于写技术文章,我一直秉承的一个原则是:能用图形就尽量不用文字,如果能用动图表示那就更形象了,毕竟人脑对于结构化的图形更感兴趣,也更便于理解. 于是也有很多小伙伴好奇文章里的动图是怎么做出来的,这篇就 ...
- 使用python matplotlib实现动图绘制
前言 想写数据动态可视化很久了,但是网上竟然没有一份能直接用的代码,昨天终于狠下心来死啃了一波开发者文档搞定了这部分,贴一篇blog记录一下希望可以帮到你. 思路 动图的核心函数是matplotlib ...
- MATLAB | 全网最详细网络图(图论图)绘制教程
一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点,当然图论与网络优化的算法一篇不可能完全讲清楚,未来如果看的人多可以适当更新,同时做部分网络图绘图复刻. 以下是本篇绘图实验效果: ...
- 新手怎么画思维导图,这里有一份详细的思维导图绘制教程
导语:新手想要了解怎么画思维导图,首先就是要学会临摹思维导图模板,熟悉各种专业思维导图的样式.然而,这只是它的形,此时的思维导图是没有"灵魂"的,所以我们还需要在这个形里面注入&q ...
- matlab动态图最新存储文件,MATLAB 动图绘制、保存
动图有gif格式和视频的avi格式. 1.sin(x)动图 clear all h = animatedline;%动画线 axis([0 4*pi -1 1]) box on x = linspac ...
- python台风动图绘制_让数据动起来——三维动图剖析“海神”
原标题:让数据动起来--三维动图剖析"海神" "海神"一路北来,影响我国东北地区 我们也让数据动起来,剖析它的内在. 近半个月来,三个台风接连影响我国东北地区, ...
最新文章
- linux 查看文件内容的几种命令
- Linux 网卡驱动 PHY Mac MDIO kernel 驱动讲解 (未完待续)
- 使用属性升级MyBank
- Java容器--Map
- 一、【Collection、泛型】
- STM32学习——ROV遇到的坑
- pythonguitkinter编程入门_Python Tkinter GUI编程入门介绍
- 申请google Map api key for android
- TreeMap 排序
- Java-基础类库第一篇认识基础类库
- Hive基本原理及环境搭建
- 在opensuse tumbleweed 上开发51单片机
- lzw编码过程详解_【手打】LZW编码的C/C++实现
- mysql 定时备份脚本
- n9100 分区 Linux,​史上最全的三星N9100官方固件
- 计算机函数公式法计算出总分的式子,excel计算百分比公式的用法
- 2022-2-14至2022-2-19周报
- exe文件在服务器上打不开,EXE格式文件打不开怎么办?三个方法教你打开
- 传统手工特征方法整理--LBP,HAAR,SIFT,HOG,ORB,SURF
- 三种方法教你让模糊照片秒变高清图