前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘图技巧 | 双变量映射地图可视化绘制方法

绘图技巧 | 双变量映射地图可视化绘制方法

作者头像
DataCharm
发布2021-02-22 11:54:17
1K0
发布2021-02-22 11:54:17
举报

本期推文我们绘制不常见的双变量主题地图,该类地图可以很好的在地图上用颜色展示两个变量的信息,相较于单一变量映射地图,此类地图表达的信息更加丰富和全面。本期推文主要涉及的内容如下:

  • 双变量映射地图(Bivariate Choropleth Map)简介
  • R-ggplot2+biscale 轻松绘制双变量映射地图

Bivariate Choropleth Map

在绘制地图时,我们常常使用单一变量进行映射处理,当然,这样展示的结果可以很好的表现我们研究的特征(如收入、房价等)的变化情况或者具体的情况,如下图:

单一变量映射地图

首先,我们先通过通过下图来简单解释下双变量映射的含义:

  1. 首先我们创建单一变量的3级顺序配色色系。色系从较浅的中性色开始,代表第一个变量的最小值。色系颜色逐渐变暗,并朝着代表较高值的色相饱和。中间色应与底色具有相同的色相,但其饱和度应较低而亮度较高,如下:
  1. 根据第一步,我们再创建一个色系,色系颜色含义类似,如下:
  1. 我们将所选择的6种颜色经过旋转拉伸等操作,即可获得 如下效果:

4.双变量配色色系的数值表示可以用以下这幅图表示:

此外,我们还可以使用A,B或C标记水平方向的单元格,用1、2或3

标记垂直方向的单元格:如下:

(注:以上双变量简介参考资料:Bivariate Choropleth Maps: A How-to Guide[1])

R-ggplot2+biscale 轻松绘制双变量映射地图

在简单介绍完之后,接下来,我们使用R语言的biscale、ggplot2以及cowplot包完成此类地图的绘制。R-biscale包是专门为了绘制双变量映射地图而产生的R绘图包,其官网为:https://slu-opengis.github.io/biscale/articles/biscale.html,目前支持2×2和3×3的二元映射,以下为官网提供的样例,更多例子及函数用法,大家可以参考官网:

「样例01」

「样例02」

two-by-two palettes

three-by-three palettes

接下来,我们使用具体的例子介绍使用biscale包绘制双变量映射地图教程。这里的数据地图数据和指标数据分别来自albersusa和socviz包,albersusa包提供了美国标准地图地图文件数据,socviz包则提供了许多常用的指标数据,这两个包也为绘制美国地图省去了寻找数据的时间(小编可是找了好久的数据,最后才找到这个宝藏包哦~~),话不多说,我们直接上代码,具体如下:

「数据处理」

代码语言:javascript
复制
library(albersusa)
country_sf <- albersusa::counties_sf(proj = "laea")
usa_map <- ggplot() + 
   geom_sf(data = country_sf,size=.125) +
   theme_ipsum(base_family = "Roboto Condensed")
usa_map

可视化预览效果如下:

具体的数据格式如下:

代码语言:javascript
复制
counties <- counties_sf()
head(counties)

而我们选择socviz包中的数据操作代码如下:

代码语言:javascript
复制
us_data <- socviz::county_data %>% select(id,fips,name,state, pop,hh_income,travel_time)
head(us_data)

接下来,我们将两种数据(地图数据+指标数据)根据fips编码进行合并,需要注意的是我们需要将地图文件中fips列转换成字符串类型,详细代码如下:

代码语言:javascript
复制
counties <- mutate(counties,fips=as.character(fips)) #mutate()生成新列
bio_data <- left_join(counties,us_data,by = c("fips"="id"))

最后,我们使用biscale::bi_class()方法将合并后的数据转换成可用于绘制双变量映射的数据集,代码如下:

代码语言:javascript
复制
process_data <- biscale::bi_class(bio_data,x = hh_income,y = travel_time,style = "quantile",dim = 3)
head(process_data)

注意:红框中的数据就是我们用于映射的数据集,接下来,我们进行可视化展示:

「可视化绘制」:在此之前,我们需将绘制数据使用sf::st_transform()进行投影转换,使其更好的展示美国地图,代码如下:

代码语言:javascript
复制
process_data_2163 <- sf::st_transform(process_data,crs = 2163)

可视化绘制代码如下:

代码语言:javascript
复制
usa_bivar_2163_them <- ggplot() +
  geom_sf(data = process_data_2163, mapping = aes(fill = bi_class), color = "black", size = 0.025, show.legend = FALSE) +
  bi_scale_fill(pal = "DkBlue", dim = 3) +
  labs(
      title = "Example Bivariate choropleth Map of <span style='color:#D20F26'>USA</span>",
      subtitle = "Dark Blue (DkBlue) Palette in <span style='color:#1A73E8'>biscale</span>",
      caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>" 
  ) +

  bi_theme() +
  theme(
       plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                 size = 24, margin = margin(t = 1, b = 12)),
       plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
       plot.caption = element_markdown(face = 'bold',size = 12,hjust = 1)
  )
usa_bivar_2163_them

可视化效果如下:

「双变量图例绘制」

biscale包也提供了用于绘制双变量映射地图图例的简单绘制方法,对于本例子,图例绘制如下:

代码语言:javascript
复制
legend_us <- bi_legend(pal = "DkBlue",
                    dim = 3,
                    xlab = "Higher Income ",
                    ylab = "Higher Travel Time ",
                    size = 6) 
legend_us

图例效果如下:

legend

最后,我们使用cowplot包进行图片组合即可:

代码语言:javascript
复制
library(cowplot)
# combine map with legend
finalPlot <- ggdraw() +
  draw_plot(usa_bivar_2163_them, 0, 0, 1, 1) +
  draw_plot(legend_us, .58, .05, 0.2, 0.2)
finalPlot

最终效果如下:

总结

双变量映射地图其实在很早的时候就准备进行绘制了,虽然查阅到相关绘制资料,但其较多的代码量是我一直不敢写教程(怕自己还没整明白,误导小伙伴们),但是有了biscale包就可以较简单的进行绘制了,这里需要夸下R-ggplot2绘图体系真的十分完善哦好了,本篇推文就结束了,文本需要绘制的数据都可以直接通过安装相应的包进行获取,希望大家可以好好练习下哦~~

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bivariate Choropleth Map
  • R-ggplot2+biscale 轻松绘制双变量映射地图
  • 总结
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档