Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用gganimate制作R中的动态地理地图

用gganimate制作R中的动态地理地图
EN

Stack Overflow用户
提问于 2019-11-30 19:48:11
回答 2查看 2.6K关注 0票数 0

我可以在R中生成一些看起来不错的choropleth地图,例如,请参见以下内容

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
library(rnaturalearth) 
library(rnaturalearthdata)

set.seed(1234)

ww <- ne_countries(scale = "medium", returnclass = "sf")

ll <- ww$name %>% length

val <- sample(c("a","b","c","d"), ll, replace=T)
bb <- ne_download(type = "wgs84_bounding_box", category = "physical",
              returnclass = "sf")

ww <- ww %>% mutate(value=val)


gpl1 <- ggplot(data = ww) +
geom_sf(aes(fill=value),  col = "black", lwd = 0.3 )+
xlab(NULL) + ylab(NULL) +
ggtitle("World Export of Merchandise")+
geom_sf(data = bb, col = "grey", fill = "transparent") +
theme(plot.background = element_rect(fill = "white"),
      panel.background = element_rect(fill = 'white'),
      panel.grid.major = element_line(colour = "grey"),
      legend.position="top",
      plot.title = element_text(lineheight=.8, size=24, face="bold",
                                vjust=1),
      legend.text = element_text(vjust=.4,lineheight=1,size = 14),
      legend.title = element_text(vjust=1,lineheight=1, size=14,
                                  face="bold" ))+
coord_sf(crs = "+proj=eqearth +wktext") 

ggsave("test_world1.pdf", gpl1, width=6*1.618,height=5)

但是假设我有几年的数据,例如

代码语言:javascript
运行
AI代码解释
复制
values_years <- tibble(value=sample(c("a","b","c","d"), 4*ll, replace=T),
            years=sample(seq(4), 4*ll, replace=T))

有没有人知道如何使用gganimate来生成一个显示不同年份时国家颜色自动变化的choropleth地图?我不是在寻找交互式的viz,而是像这样的东西。

https://www.blog.cultureofinsight.com/2017/09/animated-choropleth-maps-in-r/

只是我很难简化这个例子来满足我的需求。如有任何帮助,我们不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2019-12-01 13:53:44

我既不是地理空间数据专家,也不是gganimate专家,但我通过执行以下操作,设法获得了与您的问题类似的答案。我们将以类似于您开始示例的方式开始,但是我们还加载了gganimate包。

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
library(rnaturalearth) 
library(rnaturalearthdata)
library(gganimate) # also needs transformr

## Do all previous stuff
set.seed(1234)

ww <- ne_countries(scale = "medium", returnclass = "sf")

ll <- ww$name %>% length

val <- sample(c("a","b","c","d"), ll, replace=T)
bb <- ne_download(type = "wgs84_bounding_box", category = "physical",
                  returnclass = "sf")
ww <- ww %>% mutate(value=val)

然后,对于我们的每个时间点,我们复制数据并为每个形状、时间点和新的填充变量分配一个组。分组是必需的,因为默认情况下,填充将确定分组,并且动画将显示所有国家/地区在地图上的跳跃。

代码语言:javascript
运行
AI代码解释
复制
newdf <- lapply(seq_len(5), function(i) {
  new <- ww
  new$group <- seq_len(nrow(new))
  new$value <- sample(letters[1:4], nrow(new), replace = TRUE)
  new$time <- i
  new
})
newdf <- do.call(rbind, newdf)

然后我们画个图。主要区别在于,我在geom_sf()中分配了一个组并添加了transition_time(time)。此外,我还添加了一个副标题来跟踪动画状态。

代码语言:javascript
运行
AI代码解释
复制
gpl1 <- ggplot(data = newdf) +
  geom_sf(aes(fill=value, group = group),  col = "black", lwd = 0.3 )+
  xlab(NULL) + ylab(NULL) +
  ggtitle("World Export of Merchandise", subtitle = "{frame_time}")+
  geom_sf(data = bb, col = "grey", fill = "transparent") +
  theme(plot.background = element_rect(fill = "white"),
        panel.background = element_rect(fill = 'white'),
        panel.grid.major = element_line(colour = "grey"),
        legend.position="top",
        plot.title = element_text(lineheight=.8, size=24, face="bold",
                                  vjust=1),
        legend.text = element_text(vjust=.4,lineheight=1,size = 14),
        legend.title = element_text(vjust=1,lineheight=1, size=14,
                                    face="bold" )) +
  transition_time(time)
  # coord_sf(crs = "+proj=eqearth +wktext") # couldn't get this coord to work

然后我们制作动画:

代码语言:javascript
运行
AI代码解释
复制
ani <- animate(gpl1)

票数 1
EN

Stack Overflow用户

发布于 2019-12-02 14:16:24

谢谢,但我想我找到了更简单的方法。

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)

library(rnaturalearth) 
library(rnaturalearthdata)

library(gganimate)

set.seed(1234)

ww_ini <- ne_countries(scale = "medium", returnclass = "sf")

ll <- ww_ini$name %>% length

val <- sample(c("a","b","c","d"), ll, replace=T)



bb <- ne_download(type = "wgs84_bounding_box", category = "physical",
              returnclass = "sf")

ww <- ww_ini %>%
mutate(value=val)


gpl1 <- ggplot(data = ww) +
geom_sf(aes(fill=value),  col = "black", lwd = 0.3 )+
xlab(NULL) + ylab(NULL) +
ggtitle("World Export of Merchandise")+
 geom_sf(data = bb, col = "grey", fill = "transparent") +
theme(plot.background = element_rect(fill = "white"),
      panel.background = element_rect(fill = 'white'),
      panel.grid.major = element_line(colour = "grey"),
      legend.position="top",
      plot.title = element_text(lineheight=.8, size=24, face="bold",
                                vjust=1),
      legend.text = element_text(vjust=.4,lineheight=1,size = 14),
      legend.title = element_text(vjust=1,lineheight=1, size=14,
                                  face="bold" ))+
coord_sf(crs = "+proj=eqearth +wktext") 

ggsave("test_world1.pdf", gpl1, width=6*1.618,height=5)



values_years <- tibble(name=rep(ww$name,4),
                   year=c(rep(1,ll), rep(2,ll), rep(3, ll), rep(4, ll)),
                   value=sample(c("a","b","c","d"),4* ll, replace=T))


 ww_ext <- left_join(ww_ini, values_years, by="name")



gpl2 <- ggplot(data = ww_ext) +
geom_sf(aes(fill=value),  col = "black", lwd = 0.3 )+
xlab(NULL) + ylab(NULL) +
ggtitle("World Export of Merchandise")+
 geom_sf(data = bb, col = "grey", fill = "transparent") +
theme(plot.background = element_rect(fill = "white"),
      panel.background = element_rect(fill = 'white'),
      panel.grid.major = element_line(colour = "grey"),
      legend.position="top",
      plot.title = element_text(lineheight=.8, size=24, face="bold",
                                vjust=1),
      legend.text = element_text(vjust=.4,lineheight=1,size = 14),
      legend.title = element_text(vjust=1,lineheight=1, size=14,
                                  face="bold" ))+
 coord_sf(crs = "+proj=eqearth +wktext") +

transition_manual(year )

anim <- animate(gpl2)

这仍然是一种尝试和错误,特别是在选择transition_动词时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59119667

复制
相关文章
R语言学习 - 柱状图
柱状图绘制 柱状图也是较为常见的一种数据展示方式,可以展示基因的表达量,也可以展示GO富集分析结果,基因注释数据等。 常规矩阵柱状图绘制 有如下4个基因在5组样品中的表达值 data_ori <- "Grp_1;Grp_2;Grp_3;Grp_4;Grp_5 a;2.6;2.9;2.1;2.0;2.2 b;20.8;9.8;7.0;3.7;19.2 c;10.0;11.0;9.2;12.4;9.6 d;9;3.3;10.3;11.1;10" data <- read.table(text=data_ori
生信宝典
2018/02/05
2.6K0
R语言学习 - 柱状图
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3.1K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
Pandas中求某一列中每个列表的平均值
前几天在Python最强王者交流群【冫马讠成】问了一道Pandas处理的问题,如下图所示。
前端皮皮
2022/08/17
5.1K0
Pandas中求某一列中每个列表的平均值
ggcoverage优雅的绘制各种组学注释图
R语言数据分析指南
2023/08/18
5920
ggcoverage优雅的绘制各种组学注释图
ggplot2
原文:https://blog.csdn.net/weixin_44510615/article/details/89579225
润森
2019/11/05
7090
ggplot2
单细胞转录组绘制肺癌图谱
肺癌是一种异质性疾病,包括不同的组织病理学亚型。除了腺癌和鳞状细胞癌外,2021 年 WHO 分类还包含肺神经内分泌肿瘤 (NEN) 类别。其中包括高级别神经内分泌癌 (NEC)、小细胞肺癌 (SCLC) 和大细胞神经内分泌癌 (LCNEC) 以及肺的低级别和中级别神经内分泌肿瘤 (NET),也分别称为典型类癌和非典型类癌。
生信技能树jimmy
2023/02/16
4600
单细胞转录组绘制肺癌图谱
单细胞转录组绘制肺癌图谱
肺癌是一种异质性疾病,包括不同的组织病理学亚型。除了腺癌和鳞状细胞癌外,2021 年 WHO 分类还包含肺神经内分泌肿瘤 (NEN) 类别。其中包括高级别神经内分泌癌 (NEC)、小细胞肺癌 (SCLC) 和大细胞神经内分泌癌 (LCNEC) 以及肺的低级别和中级别神经内分泌肿瘤 (NET),也分别称为典型类癌和非典型类癌。
生信技能树
2023/02/27
2130
单细胞转录组绘制肺癌图谱
python通过Matplotlib绘制常见的几种图形
使用matplotlib对几种常见的图形进行绘制 Matplotlib官网 如果想了解更多可查看官网。 import numpy as np import matplotlib.pyplot as plt %matplotlib inline #写了这个就可以不用写plt.show() plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 X
Python研究者
2021/08/23
8640
用matlab绘制函数图像例题_matlab绘制方程组图像
比如f(x,y)=-((x^2+y-1).^2+(x+y^2-7)^2)/200+10
全栈程序员站长
2022/10/04
9070
用matlab绘制函数图像例题_matlab绘制方程组图像
PHP-通过for循环将数组中值求和、求平均值
6、 打印100以内的斐波那契数(迭代法)1 1 2 3 5 8 13 21 …
cwl_java
2020/03/26
2.9K0
通过UDP的组播方式收发数据
客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Text; na
liulun
2022/05/09
1.2K0
这些条形图的用法您都知道吗?
条形图专用于离散变量和数值变量之间的可视化展现,其通过柱子的高低,直观地比较离散变量各水平之间的差异,它被广泛地应用于工业界和学术界。在R语言的ggplot2包中,读者可以借助于geom_bar函数轻松地绘制条形图。对于条形图大家对其的印象是什么呢?又见过哪些种类的条形图呢?在本篇文章我将带着各位网友说道说道有关条形图的哪些品种。
1480
2019/08/05
5.7K0
这些条形图的用法您都知道吗?
python求平均值的怎么编写,python 怎么求平均值[通俗易懂]
python求平均值的方法:首先新建一个python文件;然后初始化sum总和的值;接着循环输入要计算平均数的数,并计算总和sum的值;最后利用“总和/数量”的公式计算出平均数即可。
全栈程序员站长
2022/11/15
7.3K0
python求平均值的怎么编写,python 怎么求平均值[通俗易懂]
pycirclize带你轻松绘制基因组图
R语言数据分析指南
2023/08/18
8951
pycirclize带你轻松绘制基因组图
ggplot2绘制森林图(有亚组和没亚组)
之前写了很多篇推文介绍森林图,包括了常见的forestplot/forestploter/ggforestplot等多个R包:
医学和生信笔记
2023/02/14
2.7K0
ggplot2绘制森林图(有亚组和没亚组)
空间转录组都绘制了哪些图谱?
之前我们通过一篇综述(👉  空间转录组是一种怎样的转录组?),了解了空间转录组各种方法的技术原理/优缺点,空间转录组的应用等信息,其中空间转录组的应用范围覆盖构建空间转录组图谱和描绘胚胎发育/空间蓝图等。 空间转录组都绘制了哪些图谱? 01人类心脏发育全器官尺度单细胞基因表达时空图谱 研究人员采集妊娠早期三个阶段(4.5–5,6.5,9周)的心脏组织样本,依次采用空间转录组学(ST)、单细胞转录组测序(scRNA-seq)和原位靶向测序技术(ISS)进行分层研究。揭示了胚胎心脏在三个发育阶段的细胞类型的
尐尐呅
2021/09/02
9300
空间转录组都绘制了哪些图谱?
GENESPACE优雅的绘制基因组共线性图
R语言数据分析指南
2023/08/18
1K0
GENESPACE优雅的绘制基因组共线性图
ggplot2多图Panel 组合【facet_wrap() and facet_grid()】
今天就说下ggplot在绘制多图时候的一些骚操作。R里面的ggplot绘图很强大,有时候一张图可能满足不了我们的需求,需要分组展示,同时放在同一个Panel内。这时候ggplot里面的(facet_wrap() and facet_grid())[https://www.r-graph-gallery.com/ggplot2-package.html]就提供了极大的便利。 本文主要介绍:
Jamesjin63
2022/11/03
1.4K0
ggplot2多图Panel 组合【facet_wrap() and facet_grid()】
数据挖掘知识脉络与资源整理(九)–柱形图
柱形图 简介 英文:histogram或者column diagram 排列在工作表的列或行中的数据可以绘制到柱形图中。在柱形图中,通常沿水平轴组织类别,而沿垂直轴组织数值。 柱形图具有下列图表子类型
小莹莹
2018/04/25
3.8K0
数据挖掘知识脉络与资源整理(九)–柱形图
点击加载更多

相似问题

Microsoft Graph API / Office Planner数据的权限访问令牌

11

Microsoft Graph Api -No权限在请求Me.Photo时访问令牌

111

Microsoft Graph API的权限

10

Microsoft Graph API -获取组-权限错误

120

Microsoft Graph API访问令牌验证失败(java)

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档