|
对于如何能在地图上精确标注自己的数据,很多人都不知道如何做。很久以前做过一个图,那时是在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") #柱状图绘制,根据自己的需求调整大小和颜色
通过简单的几句代码就可以绘制出看起来十分复杂,包含大量信息的地图。下面我们看一下效果图:
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 02:57
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社