首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >绘图技巧 | “变形”地图可视化绘制方法

绘图技巧 | “变形”地图可视化绘制方法

作者头像
DataCharm
发布2021-02-22 10:50:32
发布2021-02-22 10:50:32
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

今天的推文给大家介绍一个可以绘制”变形“地图的可视化包-R-cartogram包,改包可以使绘制地图时某些区域的几何形状进行扭曲变化,可以更好的传递地图表达的信息。主要内容如下:

  • cartogram包简介
  • cartogram包实例演示

cartogram包简介

cartogram包的官网为:https://github.com/sjewo/cartogram。其主要绘图函数有cartogram_cont()、cartogram_ncont()和cartogram_dorling()函数,我们依次列出其对应的绘图结果(以下直接给出绘制结果,注:地图基于tmap包绘制),如下:

「cartogram_cont()」

cartogram_cont example

「cartogram_ncont()」

cartogram_ncont example

「cartogram_dorling()」

cartogram_dorling example

接下来我们将使用具体数据进行各个绘图函数的绘制结果,我们还是使用ggplot2进行绘制。

cartogram包实例演示

这一部分我们使用的地图数据还是美国数据,来自于绘制美国标准地图的albersusa包,该包还包括人口数据POP,我们使用这两个数据对cartogram包进行演示。首先我们直接映射人口数据(不做数据变形)。可视化绘制代码如下(包括美化处理):

代码语言:javascript
代码运行次数:0
运行
复制
library(albersusa)
library(sf)
library(tidyverse)
library(hrbrthemes)
library(ggtext)
library(rcartocolor) # 可视化颜色包

# 导入数据
us_sf <- usa_sf("laea")
# 可视化绘制
library(rcartocolor) # 可视化颜色包
# 去除科学计数法表示样式
options(scipen=10000)

map_pir <- ggplot()+
  geom_sf(data = us_sf, aes(geometry = geometry, fill = pop_2014),
          color = "transparent", size = 1) +
  rcartocolor::scale_fill_carto_c(palette = "BluYl", name = "POP 2014",
                                  direction = -1, 
                                  guide = F,
                                  limits = c(0,40000000),
                                  breaks = seq(0, 40000000, by = 8000000),
                                  labels = glue::glue("{seq(0, 40000, by = 8000)} k")
                                   
                                )+
  guides(fill = guide_colorbar(barheight = unit(2.3, units = "mm"),  
                               barwidth = unit(100, units = "mm"),
                               direction = "horizontal",
                               ticks.colour = "grey40",
                               title.position = "left",
                               label.position = "bottom",
                               title.vjust = 1)) +
  labs(
      title = "Example Choropleth Map of <span style='color:#D20F26'>USA POP </span>Data",
      subtitle = "BluYl Color Palette in  <span style='color:#1A73E8'>rcartocolor</span> library",
      caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>" 
  ) +
 #定制化美化样式
 theme(
       text = element_text(family = "Roboto Condensed"),
       axis.ticks = element_blank(),
       axis.text = element_blank(),
       panel.grid.major = element_blank(),
       panel.grid.minor = element_blank(),
       panel.background = element_rect(fill = "black"),
       plot.background = element_rect(fill = "black"),
       plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "white",face = "bold",
                                     size = 24, margin = margin(t = 1, b = 12)),
       plot.subtitle = element_markdown(hjust = 0,vjust = 1,size=15,color = "white"),
       plot.caption = element_markdown(face = 'bold',size = 12,hjust = 1,color = "white"),
       legend.position = "bottom",
       legend.title = element_text( color = "grey60", face = "bold", size = 14),
       legend.text = element_text(color = "grey60", size = 10),
       legend.background = element_rect(fill = "black")
  )
  
map_pir

可视化结果如下:

Choropleth Map

接下来,我们依次使用上面介绍的三个函数进行绘制结果绘制。

cartogram_cont()结果

「绘制代码」

代码语言:javascript
代码运行次数:0
运行
复制
# 数据转化处理
usa_cartogram <- cartogram_cont(us_sf, "pop_2014", itermax=7)

#可视化绘制
options(scipen=10000)

map_cont <- ggplot()+
  geom_sf(data = usa_cartogram, aes(geometry = geometry, fill = pop_2014),
          color = "transparent", size = 1) +
  rcartocolor::scale_fill_carto_c(palette = "BluYl", name = "POP 2014",
                                  direction = -1, 
                                  guide = F,
                                  limits = c(0,40000000),
                                  breaks = seq(0, 40000000, by = 8000000),
                                  labels = glue::glue("{seq(0, 40000, by = 8000)} k")
                                   
                                )+
  guides(fill = guide_colorbar(barheight = unit(2.3, units = "mm"),  
                               barwidth = unit(100, units = "mm"),
                               direction = "horizontal",
                               ticks.colour = "grey40",
                               title.position = "left",
                               label.position = "bottom",
                               title.vjust = 1)) +
  labs(
      title = "Example Cartogram Map of <span style='color:#D20F26'>USA</span>",
      subtitle = "BluYl Color Palette in  <span style='color:#1A73E8'>rcartocolor</span> library",
      caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>" 
  ) +
 #hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
 theme(
       text = element_text(family = "Roboto Condensed"),
       axis.ticks = element_blank(),
       axis.text = element_blank(),
       panel.grid.major = element_blank(),
       panel.grid.minor = element_blank(),
       panel.background = element_rect(fill = "black"),
       plot.background = element_rect(fill = "black"),
       plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "white",face = "bold",
                                     size = 24, margin = margin(t = 1, b = 12)),
       plot.subtitle = element_markdown(hjust = 0,vjust = 1,size=15,color = "white"),
       plot.caption = element_markdown(face = 'bold',size = 12,hjust = 1,color = "white"),
       legend.position = "bottom",
       legend.title = element_text( color = "grey60", face = "bold", size = 14),
       legend.text = element_text(color = "grey60", size = 10),
       legend.background = element_rect(fill = "black")
  )

「可视化结果:」

US POP cartogram_cont

cartogram_ncont()可视化结果

「绘制代码」:(由于好多代码是重复的,这里我放出不同之处的代码即可)

代码语言:javascript
代码运行次数:0
运行
复制
# 数据转换处理
usa_cartogram_n = cartogram_ncont(us_sf, "pop_2014")

#可视化绘制
··· +
geom_sf(data = usa_cartogram_n, aes(geometry = geometry, fill = pop_2014),
          color = "transparent", size = 1) +
···

「可视化结果:」

US POP cartogram_ncont

cartogram_dorling()可视化结果

「绘制代码」:(由于好多代码是重复的,这里我放出不同之处的代码即可)

代码语言:javascript
代码运行次数:0
运行
复制
# 数据处理
usa_cartogram_dorling  <- cartogram_dorling(us_sf, "pop_2014")

#可视化绘制
··· +
geom_sf(data = usa_cartogram_dorling, aes(geometry = geometry, fill = pop_2014),
          color = "transparent", size = 1)  +
···

「可视化结果:」

US POP cartogram_dorling

以上就是cartogram包主要绘图函数的介绍了~~~

总结

今天的推文接好了一种”变形“地图的绘制方法 (R-cartogram包),虽然没常规地图使用的广泛,但却有着比一样的数据价值体现,希望小伙伴们可以多使用该包绘制出自己的地图可视化作品。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cartogram包简介
  • cartogram包实例演示
    • cartogram_cont()结果
    • cartogram_ncont()可视化结果
    • cartogram_dorling()可视化结果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档