最近我一直尝试利用R绘制地图,我从网上找到了上百种不同的实现方法,然而其中却没有适用于我的数据的方法。最终,我从以下几个博客【1】中找到了灵感。我在整合这些资源的基础上,通过不断的试验和修正得到了一个较好地解决方案。这个方案就是本篇博文的主要内容。

本篇博文中展示了如何利用 ggplot2 来绘制分级统计地图,同时还介绍了如何更改图例、颜色等参数指标,以及如何导出图像文件。

数据预处理

绘制分级统计地图需要一些软件包,你最好确认你的电脑中已经安装并加载了它们。我们利用 maptools 库中的 readShapeSpatial() 函数来读取形状数据。形状数据是储存了经纬度等地图信息的空间向量数据。好消息是,你可以免费下载这些数据!比如,你可以在这个网站中【2】下载全球各个 国家的形状数据。

我的项目是对印度的数据进行绘图分析,所以我下载了印度的形状数据并将它们导入到 R 中。

我们所导入的形状数据是一个空间类型的数据,我们可以检查它的变量名来观测它包含哪些内容。比如我们可以输出各个邦的名称:

现在我们已经得到目标数据。接下来我将会编造一些数据,你也可以导入 csv 格式的数据或者从你估计的模型中提取数据。最重要的一点是,新导入的数据中 id 号码必须和形状数据中的 id 一致,因为我们等会要合并这两个数据集。

[译者注]此处代码有误,原数据的ID编码为1287-1321,所以“id=1:num.states”应改为“id=1286+(1:num.states)”。

现在我们需要整合形状数据和目标数据集。首先,我们利用 ggplot 中的 fortify() 函数将形状数据转换成数据框格式的数据。该函数可以根据特定的识别变量将数据转化成数据框格式。

[译者注]此处显示的 ID 数据与原数据集的 ID 数据不一致。

我们可以看到这是一个常见的数据框格式的数据,其中列向量包含了经纬度数据。

接下来我们根据 ID 数据合并两个数据集,并保证空间数据集中没有缺失值。更重要的是,我们需要根据变量 order 对数据集进行排序。

基础绘图

我们准备利用 ggplot()、geom_polygon() 和 coord_map() 函数来绘图。

高阶绘图

上一部分只是绘图的开始,我们还可以通过调整其他参数使图形变得更漂亮。首先,我们可以利用 ggmap() 库中的 theme_nothing() 来删除背景和网格线,同时还需要设置 legend 的参数绘制图例。当然,我们还可以更改图例和整个图像的标题。

接下来,我们将配色改为“YlGn”(从黄色到绿色过渡)。你可以通过 display.brewer.all() 函数来观察具体配色情况。

我们也可以利用 scales 库中的 pretty_breaks() 函数来获取最佳分割点。如果你不喜欢 pretty_breaks() 的方法,你还可以通过 scale_fill_gradient() 来实 现:scale_fill_gradient(name=”var”,limits=c(0,100),low=”white”,high=”red”)

其他参数:

如果你想要将数值表示为暗色而不是亮色,那么你们可以在 scale_fill_distiller() 中加入 trans=”reverse”。

如果你面对的是离散型变量,那么你应该采用 scale_fill_manual() 函数:

此外,你还可以将各个邦的名称也绘制到地图上。首先,你需要识别出每个邦名对应的经纬度数据。本文中,我们利用 aggregate() 函数计算每个州经纬度取值范围的均值并作为对应邦名的坐标。

虽然这张图看起来有点乱,但是通过其他设置它将变得非常有用。当然你还可以利用 geom_text() 在地图中添加一些重要的识别信息。

导出地图数据

最后,我们可以用两种方法导出地图数据。

方法一:利用 Cairo 来导出地图。(MAC需要安装 X11)

首先我们将图像保存到对象中,然后利用 ggsave() 将该对象转化成 png 文件。

方法二:利用 pdf() 函数将对象保存为 pdf 文件

参考资料:

【1】 http://www.kevjohnson.org/making-maps-in-r/ ;

http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html

【2】http://www.diva-gis.org/gdata

原文链接:

http://rforpublichealth.blogspot.de/2015/10/mapping-with-ggplot-create-nice.html

原文作者:Slawa Rokicki

翻译:Fibears

【R】用 ggplot2 绘制漂亮的分级统计地图的更多相关文章

  1. 利用R语言制作出漂亮的交互数据可视化

    利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...

  2. R语言 ggplot2包

    R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...

  3. R语言ggplot2 简介

    ggplot2是一个绘制可视化图形的R包,汲取了R语言基础绘图系统(graphics) 和l attice包的优点,摒弃了相关的缺点,创造出来的一套独立的绘图系统: ggplot2 有以下几个特点: ...

  4. C# 使用GDI+绘制漂亮的MenuStrip和ContextMenuStrip皮肤

    通过上面的效果截图可以看到,重绘后的MenuStrip和ContextMenuStrip可以添加自己的LOGO信息,实现了类似OFFICE2007的菜单显示效果. .NET对菜单控件的绘制提供了一个抽 ...

  5. 使用echarts绘制漂亮的渐变键盘仪表盘

    echarts官方示例和默认样式都比较难看,经过一顿捣鼓实现比较漂亮的渐变仪表盘. 第一步:设置轴线 将图表轴线.label.分割线.隐藏,只保留刻度,然后修改刻度样式达到最终效果.不过要注意的是ax ...

  6. R语言绘图:ggplot2绘制ROC

    使用ggplot2包绘制ROC曲线 rocplot<- function(pred, truth, ...){ predob<- prediction(pred, truth) #打印AU ...

  7. R语言绘图:时间序列分析 ggplot2绘制ACF PACF

    R语言真是博大精深 方法一 Acf(gold[,2], type = "correlation",lag.max = 100) Acf(gold[,2], type = " ...

  8. [R可视化]ggplot2库介绍及其实例

    前言 ggplot是一个拥有一套完备语法且容易上手的绘图系统,在Python和R中都能引入并使用,在数据分析可视化领域拥有极为广泛的应用.本篇从R的角度介绍如何使用ggplot2包,首先给几个我觉得最 ...

  9. 网络/运维工程师visio2013模具图标 绘制漂亮的网络拓扑图 狮子XL工程师美学思想

    visio2013狮子XL自定义运维模具下载: 链接:http://pan.baidu.com/s/1bo779Kz 密码:xh3s 狮子XL 的美学思想: 1,一次痛苦,一生幸福. 之前,在绘制网络 ...

随机推荐

  1. Android中asset文件夹和raw文件夹区别(转载)

    原文地址:http://www.cnblogs.com/leizhenzi/archive/2011/10/18/2216428.html *res/raw和assets的相同点: 1.两者目录下的文 ...

  2. OAF_OAF控件系列7 - Tree的实现(案列)

    2014-06-02 Created By BaoXinjian

  3. Linux时间子系统(五) POSIX Clock

    一.前言 clock是timer的基础,任何一个timer都需要运作在一个指定的clock上来.内核中维护了若干的clock,本文第二章描述了clock的基本概念和一些静态定义的posix clock ...

  4. MySQL查看SQL语句执行效率(转)

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好 ...

  5. nginx是以多进程的方式来工作的

    nginx是以多进程的方式来工作的. nginx在启动后,会有一个master进程和多个worker进程. master进程主要用来管理worker进程: 包含: 1.接收来自外界的信号,向各work ...

  6. hadoop环境搭建-完全分布式

    用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统,一个win7系统.每台电脑装两个虚拟机,要不然内存就满了. 1.安装虚拟机环境 Vmware,收费产品,占内存较大. ...

  7. Lua脚本语言快速入门手册

    学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉! Lua用法简述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式 ...

  8. 如何把scratch转成一个swf文件或者exe执行文件

    scratch作为一款启蒙用的积木式编程软件,非常受人欢迎,但是,现在有一个问题就是,无法将之转变成一个可执行文件,以便和周边的人们分享. 我个人认为把scratch转变为一个可执行的exe文件,并不 ...

  9. ISE设置默认引脚 ,上拉或下拉或三态

    quartus可以在Devic and Pin Options里设置默认引脚状态, ISE也有这个功能,步骤如下, 1.右击Generate Programming File 2.选择Process ...

  10. ModelSim+Synplify+Quartus的Alte

    [page_break] 本文适合初学者,源代码:mux4_to_1.v  工作内容: 1.设计一个多路选择器,利用ModelSimSE做功能仿真: 2.利用Synplify Pro进行综合,生成xx ...