首页 > 其他分享 >诺奖文章里面的动图绘制教程来了!!

诺奖文章里面的动图绘制教程来了!!

时间:2023-08-11 18:06:29浏览次数:35  
标签:10 教程 动图 gganimate ## text element 诺奖 size


作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,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


标签:10,教程,动图,gganimate,##,text,element,诺奖,size
From: https://blog.51cto.com/u_16077014/7050473

相关文章

  • CINEMA 4D C4D R17三维动画软件下载和安装教程
    C4D全名CINEMA4D,由德国MaxonComputer研发出的3D动画软体。C4D是一个老牌的三维软件。能够进行顶级的建模、动画和渲染的3D工具包。内置纹理、动画、渲染、多边形建模、克隆、雕刻等多种辅助设计工具。软件介绍完整的样条工具包跟随着R17一起问世,不需再从工具间切换挑选!无论是草图......
  • 无涯教程-Perl - link函数
    描述此函数创建一个新文件名NEWFILE,链接到文件OLDFILE。该函数创建一个硬链接;如果需要符号链接,请使用符号链接功能。语法以下是此函数的简单语法-linkOLDFILE,NEWFILE返回值如果失败,此函数返回0,如果成功,则返回1。例以下是显示其基本用法的示例代码,这将使用现有......
  • 无涯教程-Perl - lc函数
    描述此函数返回小写版本的EXPR,如果省略EXPR,则返回$_。语法以下是此函数的简单语法-lcEXPRlc返回值此函数返回小写版本的EXPR,如果省略EXPR,则返回$_。例以下是显示其基本用法的示例代码-#!/usr/bin/perl$orig_string="ThisisTestandCAPITAL";$changed_st......
  • Shopify 真实案例技术赚钱营销课视频教程
    Shopify真实案例技术赚钱营销课视频教程本视频课程是为那些希望学习如何利用Shopify平台以及有效的市场营销技巧来赚钱的人群而设计的。无论你是一名初学者还是有一定经验的网店经营者,本课程都将为你提供实际案例和技术指导,从而帮助你成功创建和运营一个盈利的电子商务企业。课......
  • OpenGL教程-中文版
    本文是LearnOpenGL教程的中文翻译,英文版的地址为:https://learnopengl.com 学习(和使用)现代OpenGL需要用户对图形编程以及OpenGL的幕后运作有非常好的理解才能在编程中有很好的发挥。所以,我们会首先讨论核心的图形学概念,OpenGL怎样将像素绘制到屏幕上,以及如何利用黑科技做出一......
  • ​​​软件开发入门教程网之​​MySQL LIKE 子句​
    我们知道在MySQL中使用SQLSELECT命令来读取数据,同时我们可以在SELECT语句中使用WHERE子句来获取指定的记录。WHERE子句中可以使用等号=来设定获取数据的条件,如"kxdang_author='RUNOOB.COM'"。但是有时候我们需要获取kxdang_author字段含有"COM"字符的所有记录,......
  • ​​​软件开发入门教程网之​​MySQL 连接的使用​
    在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。本章节我们将向大家介绍如何使用MySQL的JOIN在两个或多个表中查询数据。你可以在SELECT,UPDATE和DELETE语句中使用Mysql的JOIN来联合多表查询。JO......
  • 无涯教程-Perl - last函数
    描述这不是功能。last关键字是一个循环控制语句,该语句立即导致循环的当前迭代变为最后一个。不再执行任何语句,循环结束。如果指定了LABEL,则它将退出LABEL标识的循环,而不是当前封闭的循环。语法以下是此函数的简单语法-lastLABELlast返回值这不会返回任何值。例......
  • ios app真机测试到上架App Store详细教程-必看
    Appuploader常见问题转存失败重新上传取消上架基本需求资料1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程)2、开发好的APP通过本篇教程,可以学习到ios证书申请和打包ipa测试上架的完整流程,中途可能会遇到一些报错,一般在教程对常见错误都有解释,仔细看看,不清楚可以联系......
  • 软件开发入门教程网 Search之C++ 动态内存
       C++基本的输入输出   ......