最近我一直尝试利用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. Socket详解-Linux Socket编程(不限Linux)

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  2. 软件测试自动化之- 基于反射的UI自动化测试框架 - UI Automation Test Framework

    测试自动化程序的任务 基于反射的ui测试自动化程序,要完成的6项任务: 通过某种方式从测试套件程序中运行待测程序(AUT: Applicaton Under Test),以便于两个程序之间进行通信 操 ...

  3. redis 基本类型

    1 hashes 类型及操作 redis hash 是一个string 类型的 field 和 value 的映射表.他的添加.删除操作时间复杂度都是 O(1) 2 hset,设置 hash fiel ...

  4. 「Java Web」主页静态化的实现

    一个站点的主页一般不会频繁变动,而大多数用户在訪问站点时不过浏览一下主页(未登陆).然后就离开了.对于这类訪问请求.假设每次都要通过查询数据库来显示主页的话,显然会给server带来多余的压力. 这时 ...

  5. sqlite时间戳转时间语句(时间转时间戳)实例

    sqlite时间戳转时间.时间转时间戳的方法 实现代码: sqlite, 'unixepoch', 'localtime'); +----------------------------------- ...

  6. 黑客编程教程(二)Win API编程简介

    第二节 Win API编程简介 下面介绍一下WIN API. 我们需要自己编写一个工具时,必然会用到很多操作windows和控制windows的函数,这些函数就是windows API. API是Ap ...

  7. iPython网页启动

    安装必要的软件包: pip install "ipython[all]"   启动命令:ipython notebook --inline=pylib 自动采用默认浏览器打开 ht ...

  8. 关于WEB-INF文件夹中的内容

    刚才使用了fileupload的jar包,老样子,我只是在eclipse中将其添加到了project的java build path/libraries中 我以为这样就行了,是的,是行了,仅仅能保证在 ...

  9. HttpClient和HttpURLConnection的区别

    总结了网上的一些资源,主要有以下两个观点: 分析一: 在研究Volley框架的源码中,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnecti ...

  10. DHCP配置实例

    配置DHCP的思路: 1.创建dhcp服务2.添加一个网络号(或者说地址池)3.排除路由器的网管4.排除DHCP的网关 代码: Router>enableRouter#configRouter# ...