今天的推文给大家介绍一个可以绘制”变形“地图的可视化包-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包进行演示。首先我们直接映射人口数据(不做数据变形)。可视化绘制代码如下(包括美化处理):
**
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()结果
「绘制代码」:
# 数据转化处理
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()可视化结果
「绘制代码」:(由于好多代码是重复的,这里我放出不同之处的代码即可)
# 数据转换处理
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()可视化结果
「绘制代码」:(由于好多代码是重复的,这里我放出不同之处的代码即可)
# 数据处理
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包)*,虽然没常规地图使用的广泛,但却有着比一样的数据价值体现,希望小伙伴们可以多使用该包绘制出自己的地图可视化作品。