qiangh的个人博客分享 http://blog.sciencenet.cn/u/qiangh

博文

在地图上标注饼图和柱状图_R

已有 13869 次阅读 2014-5-11 20:44 |系统分类:科研笔记

对于如何能在地图上精确标注自己的数据,很多人都不知道如何做。很久以前做过一个图,那时是在ppt里,一个点一个点画的,虽然图看起来差不多,但这样做位置必然不够精确。近两天在网上搜索了好长时间,终于能够做出自己想要的图。现在用 http://www.nature.com/ncomms/journal/v2/n9/full/ncomms1467.html这篇文章的数据做一个水稻世界分布图来测试一下这个方法。

首先数据准备,我整理了一下这篇文章的数据,对于作图,我们只需要经纬度和个体亚组信息,为了方便统计我加了一列value,其实就是个体数。数据准备好之后我们需要对数据进行预处理,这一步是为了画饼图和柱状图做准备,这里我们用到reshape包,所以没有安装reshape包的同学需要先安装reshape包(包的安装一会儿我会一起说)。

预处理完数据之后我们就要开始作图了,一般的思路是先画一个世界地图,然后再在地图上标注上数据信息,但是这里我们用到"rwoldmap",和"rwoldxtra"两个包可以让我们地图和数据一次性做好,这也目前我找到的最方便的方法。

下面就具体说一下如何做这个图:

首先安装我们今天需要用到的包:

install.packages("reshape")

install.packages("rworldmap")

install.packages("rworldxtra")

接着载入这三个包:

require(reshape)

require (rworldmap)

require(rworldxtra)

rice <- read.table("E:/R/map/riceLonLat.txt", head=T) #读入今天要用到的数据(请下载附件数据)

rice_reshape <- rice_reshape <- cast(rice,Latitude+Longitude~Sub.population) #对数据进行预处理

rice_reshape <- as.data.frame(rice_reshape)

mapPies(rice_reshape,nameX="Longitude",nameY="Latitude",nameZs=c('ADMIX','AROMATIC','IND','TEJ','TRJ'),mapRegion='world',symbolSize=1,barOrient='vert',oceanCol="dodgerblue",landCol="lightgreen") #饼图绘制,根据自己的需求调整大小和颜色

mapBars(rice_reshape,nameX="Longitude",nameY="Latitude",nameZs=c('ADMIX','AROMATIC','IND','TEJ','TRJ'),mapRegion='world',symbolSize=5,barOrient='vert',oceanCol="dodgerblue",landCol="lightgreen") #柱状图绘制,根据自己的需求调整大小和颜色
通过简单的几句代码就可以绘制出看起来十分复杂,包含大量信息的地图。下面我们看一下效果图




riceLonLat.txt






https://blog.sciencenet.cn/blog-724080-793453.html

上一篇:​利用R中的reshape包,来整理分割合并数据
收藏 IP: 218.158.135.*| 热度|

1 胡金龙

该博文允许注册用户评论 请点击登录 评论 (4 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-16 15:09

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部