诺奖文章里面的动图绘制教程来了!!
作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,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總結
以上是生活随笔為你收集整理的诺奖文章里面的动图绘制教程来了!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可视化之为什么要使用箱线图?
- 下一篇: 投稿过程要不要考虑预印本?——medRx