如何用R直接调用世界地图引用的发现

苹果/安卓/wp
积分 6, 距离下一级还需 4 积分
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯下一级可获得
道具: 金钱卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
刚开始接触R,导师让我做meta-analysis,并在世界地图上画出相关文献的地点,就像附件中的效果,不知应如何来做呢?请大家指教,谢谢!
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
(95.32 KB)
21:52:41 上传
本帖最后由 stzhao 于
09:33 编辑
library(maps)
map(database= &world&)& && && && && && && && && & # 画世界地图
data(world.cities)
sites &- c(&Beijing&, &New York&, &Bangkok&, &Shanghai&, &Moscow&, &Singapore&)& & # 选出文章中的城市名
loc &- subset(world.cities, name %in% sites)
points(loc$long, loc$lat, pch = 20, cex = 1.5, col=&red&)&&
legend(x = -180,y= -30, legend = &Experimental site&, pch = 20, col = &red&, bty = &n&)复制代码
23:09:23 上传
总评分:&经验 + 100&
论坛币 + 20&
stzhao 发表于
library(maps)
map(database= &world&)& && && && && && && && && & # 画世界地图
data(world.cities)谢谢!请问我输入loclong loclat为什么显示'loclong' not found呢?如果我只有经纬度数据应该怎么改一下呢?再次感谢!
forwardcau 发表于
谢谢!请问我输入loclong loclat为什么显示'loclong' not found呢?如果我只有经纬度数据应该怎么改一下呢 ...loc是数据框的名字,long和lat就是经度和纬度,如果你有经纬度数据直接输入就可以了
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师苹果/安卓/wp
积分 12034, 距离下一级还需 6266 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见, 签名中使用代码
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶, 变色卡下一级可获得
道具: 置顶卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 4 天连续签到: 1 天[LV.2]偶尔看看I
比如,有中国各省的人口密度数据,如何做出反应人口密度的中国地图?
http://cos.name/2009/07/drawing-china-map-using-r/
里面讲的很清楚。
载入中......
鼓励积极发帖讨论
总评分:&学术水平 + 1&
热心指数 + 1&
信用等级 + 1&
里面讲的很清楚。
热心帮助其他会员
总评分:&学术水平 + 1&
热心指数 + 2&
信用等级 + 1&
友情帮顶。
热心帮助其他会员
总评分:&热心指数 + 1&
最好的医生是自己,最好的药物是时间……
用stata可以么。。论坛有帖子。。
热心帮助其他会员
总评分:&热心指数 + 1&
夸克之一 发表于
用stata可以么。。论坛有帖子。。当然可以,多谢区版主,能给出链接么?
耕耘使者 发表于
当然可以,多谢区版主,能给出链接么?
热心帮助其他会员
总评分:&学术水平 + 1&
热心指数 + 1&
夸克之一 发表于
http://bbs.pinggu.org/thread--1.html正在学习中,非常感谢!
没事。。这类图我倒是经常要画,所以知道,嘿嘿
夸克之一 发表于
没事。。这类图我倒是经常要画,所以知道,嘿嘿老兄真强,呵呵
用R软件绘制中国分省市地图
原帖地址:
【注】新版本的maptools包对很多函数进行了修改,对于修改的内容,文章中用红色的文字进行了说明。
鉴于最近有不少人在讨论用R软件绘制地图的问题,我也就跟着凑了凑热闹,对相应的方法学习了一番。下面的这篇文章是一个初步的介绍,还有很多内容仍在学习和探索中,如果大家有什么意见或建议,我将根据自己学习的情况对文章进行进一步的补充。
在R中绘制地图其实是十分方便的,最直接的办法大概就是安装maps和mapdata这两个包,然后输入下面的命令:
library(maps)
library(mapdata)
map(&china&)
其中map()函数还可以加上很多参数,在这里就不一一详述,具体的用法只需问号之。然而仔细看一看这张地图你会发现重庆市和四川省仍然是浑然一体,可见该地图的数据应该是有些年头了。
幸运的是,通过谢益辉的这篇博文我们已经可以大体知道该如何操作了,下面就为大家介绍一下具体的步骤。
首先,从这里下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下,并在R中设好相应的工作空间,然后安装maptools包,运行如下程序:
library(maptools);
x=read.shape('bou2_4p.shp');#下文中会继续用到x这个变量,
& && && && && && && && && & #如果你用的是其它的名称,
& && && && && && && && && & #请在下文的程序中也进行相应的改动。
【修改】新版本的maptools包不再提供read.shape()函数,请用readShapePoly()代替。
这时一张完整的中国地图就已经画好了。但是在实际使用的过程中,我们往往会根据自己的需要对地图中的某些省份着以特定的颜色,这时就可以通过调节plot命令中的fg参数来予以实现。然而为了清楚地说明这部分的内容,我需要插播一段R绘制地图的原理。
======================传说中的分割线=====================
在绘制地图时,每一个省市自治区或者岛屿都是用一个多边形来表示的。之前的GIS数据,其实就是提供了每一个行政区其多边形逐点的坐标,然后R软件通过顺次连接这些坐标,就绘制出了一个多边形区域。在上面的数据中,一共包含了925个多边形的信息,之所以有这么多是因为一些省份有很多小的附属岛屿。在这925个多边形中,每一个都对应一个唯一的ID,编号分别从1到925。
======================传说中的分割线=====================
回到刚才的话题,plot命令中的fg参数在本例中应该是一个长度为925的向量,其第i个分量的取值就代表了地图中第i个多边形的颜色。一个简单的尝试是运行下面这个命令看看效果:
plot(x,fg=gray(924:0/924));
【修改】新版本的maptools包的绘图参数也有所改变,请将fg换成col。
于是自然就产生了一个问题:如何获取某一个特定地区的ID,进而设置我们想要的颜色?事实上,在变量x中,就已经存储了我们想要的信息。在R中输入“x[[2]]”或“x$att.data”,会得到一个925行7列的数据框,这其实是bou2_4p.dbf这个文件中存储的信息,之前的read.shape()函数虽然读取的是bou2_4p.shp文件,但在默认情况下会把dbf文件的信息也放到变量之中。对于这个数据框,其行名就是每一个区域的ID编号,第一列和第二列分别是面积和周长,最后一列是该区域所属的行政区名,其它的列应该也是一些编号性质的变量。于是,通过查找相应的行政区对应的行名,就可以对fg参数进行赋值了。下面是我编的一个函数,用来生成所需的fg向量:
getColor=function(mapdata,provname,provcol,othercol)
& & & & f=function(x,y) ifelse(x %in% y,which(y==x),0);
& & & & colIndex=sapply(mapdata$att.data$NAME,f,provname);
& & & & fg=c(othercol,provcol)[colIndex+1];
& & & & return(fg);
【修改】地图数据的组织形式有所变化,上面函数中的mapdata$att.data$NAME需要替换为mapdata@data$NAME。
其中mapdata是存放地图数据的变量,在上面的例子中就是x,provname是需要改变颜色的地区的名称,provcol是对应于provname的代表颜色的向量(名称和数字均可),othercol是其它地区的颜色。举例如下:
provname=c(&北京市&,&天津市&,&上海市&,&重庆市&);
provcol=c(&red&,&green&,&yellow&,&purple&);
plot(x,fg=getColor(x,provname,provcol,&white&));
注意provname一定要写地区的全称,写法可以参照下面这条命令生成的向量:
as.character(na.omit(unique(x$att.data$NAME)));
由此生成的向量有33个元素,少了澳门特别行政区,这是这个数据中的一块瑕疵。在x$att.data的第899行有一个NA,不知道它代表的是否就是澳门。
利用类似的方法就可以根据自己的需要对不同的区域进行着色,下面再举一例。从国家统计局获取2007年我国各地区的人口数据,然后根据人口的多少对各省份进行着色。程序如下:
provname=c(&北京市&,&天津市&,&河北省&,&山西省&,&内蒙古自治区&,
& & & & & & & & &辽宁省&,&吉林省&,&黑龙江省&,&上海市&,&江苏省&,
& & & & & & & & &浙江省&,&安徽省&,&福建省&,&江西省&,&山东省&,
& & & & & & & & &河南省&,&湖北省&,&湖南省&,&广东省&,
& & & & & & & & &广西壮族自治区&,&海南省&,&重庆市&,&四川省&,&贵州省&,
& & & & & & & & &云南省&,&西藏自治区&,&陕西省&,&甘肃省&,&青海省&,
& & & & & & & & &宁夏回族自治区&,&新疆维吾尔自治区&,&台湾省&,
& & & & & & & & &香港特别行政区&);
pop=c(43,98,58,7625,
& & & & & & & & 81,60,49,
& & & & & & & & 6,14,284,,
& & & & & & & & 552,610,3);
provcol=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0);
plot(x,fg=getColor(x,provname,provcol,&white&),xlab=&&,ylab=&&);
其中颜色越深的地方代表人口数越多,反之为人口数越少。
此外,在绘制地图的过程中,还有一个比较有用的参数是recs,它是一个由多边形ID组成的向量,表示在地图中只画出这些ID所代表的区域。利用这个参数,就可以画出某一部分的地图,例如下面的例子是我国中部六省的地图:
getID=function(mapdata,provname)
& & & & index=mapdata$att.data$NAME %in%
& & & & ids=rownames(mapdata$att.data[index,]);
& & & & return(as.numeric(ids));
midchina=c(&河南省&,&山西省&,&湖北省&,&安徽省&,&湖南省&,&江西省&);
plot(x,recs=getID(x,midchina),fg=&green&,ol=&white&,xlab=&&,
& & & & & & & & ylab=&&);
上面的getID()是我编写的一个功能与getColor()类似的函数,用来返回指定省份的ID。
【修改】新版本的maptools包的绘图函数已经取消了recs这个参数,现在要实现这个功能,可以在颜色上把不需要的省份变成白色,其中填充色用col参数,边界颜色用border参数。例如上面的例子可以用下面的函数来实现:
plot(x, col = getColor(x, midchina, rep(&green&, 6),
& & &white&), border = &white&, xlab = &&, ylab = &&)
最后要说的是,在画出的图上仍然可以用points()函数和text()函数加上点和文字,而maptools包中还提供了一个pointLabel()函数,用来解决文本标签的重叠问题。这部分内容请参阅博文:用R画中国地图并标注城市位置,以及避免文本标签重叠:maptools中的pointLabel()。
从以上的内容来看,本文所述的都是一些最基本的绘图方法,还没有对地理信息数据进行更进一步的分析。如果有机会的话,这一主题的下一篇文章将为大家介绍地图数据的组成结构,并说明如何将不同格式的地理数据整合起来,例如如何在上面的地图上绘制出我国的铁路、水系分布等内容。
热心帮助其他会员
热心帮助其他会员
总评分:&学术水平 + 2&
热心指数 + 2&
信用等级 + 2&
如果该贴对您有些许帮助,希望你能回复一下或者评一下热心指数!谢谢!
初级热心勋章
初级热心勋章
初级信用勋章
初级信用勋章
初级学术勋章
初级学术勋章
中级热心勋章
中级热心勋章
高级热心勋章
高级热心勋章
中级学术勋章
中级学术勋章
中级信用勋章
中级信用勋章
高级学术勋章
高级学术勋章
特级热心勋章
高级热心勋章
高级信用勋章
高级信用勋章
特级学术勋章
特级学术勋章
特级信用勋章
高级信用勋章
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师是在R环境里调用地图作用可视化的利器。它的语法结构跟非常相似,也使R语言的用户可以迅速上手。 ggmap 结合 ggplot 可以方便快速绘制基于地图的可视化图表。下面的文章里,我将用两个例子 (”” 和 ““) 演示一下它的使用。案例数据均取自kaggle。
初步了解ggmap
get_map: 是最基本的功能,可以用于从(google/openstreetmap)下载地图。
地图下载参数
location: 如果我们知道数据的准确经纬度,我们可以直接使用。或者我们可以直接用geocode. (如 ‘San Francisco’ 用表示三藩市)
maptype: 可以根据可视化的需要,选择 ‘terrain’, ‘satellite’, ‘roadmap’, ‘hybrid’, 通常“terrain”就可以达到不错的效果。
zoom: 可以选择从 3 (大陆范围) 到 21 (建筑物范围). 因为这里的例子都是针对城市,所以我选择10-14 (城市范围)
ggmap: 用作绘制地图,可以和ggplot叠加
旧金山的犯罪记录
包含了旧金山从2013年至2015年的各种犯罪记录有及发生地点。让我以2014年的数据做以下的可视化演示。
这里我们只需要使用犯罪的类别(Category),经度(X),纬度(Y)
head(data_2014[c('Category','DayOfWeek','PdDistrict','X','Y','Year')])
Category DayOfWeek PdDistrict
## 27585 LARCENY/THEFT
MISSION -122.80 2014
## 27586 LARCENY/THEFT
NORTHERN -122.04 2014
## 27587 VEHICLE THEFT
CENTRAL -122.83 2014
NORTHERN -122.64 2014
NORTHERN -122.64 2014
NORTHERN -122.64 2014
发生最为频繁的是Larceny, other offences, non-criminal, assault and vehicle theft, 然而在这些的类别里面other offences and non criminal并不能给我们带来太多信息。因此,我会在地图上显示Larceny, Assault and Vehicle Theft,这三种犯罪的空间密度。
Crime=data.frame(table(data_2014$Category))
Crime=Crime[order(Crime$Freq,decreasing=T),]
head(Crime)
LARCENY/THEFT 18901
## 22 OTHER OFFENSES 10290
NON-CRIMINAL
VEHICLE THEFT
地图下载和绘制
Use ggmap to plot the map and use geom_jitter to plot the crimes in San Francisco:
使用get_map语句下载得到旧金山市区的地图。
library(ggmap)
map=get_map(location='San Fransico',maptype='roadmap',zoom=12)
## Map from URL : http:
使用ggmap语句绘制地图,geom_jitter画化不互相叠加的点,以表示每个犯罪的发生。
plot_crime &- ggmap(map)+geom_jitter(aes(X,Y,colour=Category),
data=data_2014[data_2014$Category %in% Top3,],alpha=0.2)+geom_jitter(aes(X,Y,colour=Category),
data=data0[data0$Category %in% Top3,],alpha=1)+labs(x='Longitude',y='Latitude')
plot_crime
在2014年里,Larceny/Theft (绿色)的案件要远远多过别的犯罪事件。大多数的犯罪发生在北海岸。
The assault crimes (红色)主要集中发生在 Tenderloin, 而该地区就是旧金山一个知名的 。
The Vehicle theft crime (蓝色) 的发生率比起前两种要少很多,没有特别严重的地区。
波尔图的出租车
包含了波尔图出租车的位置轨迹信息。波尔图为葡萄牙的第二大城市。
head(test[c('TRIP_ID','TAXI_ID','TIMESTAMP','DAY_TYPE','MISSING_DATA')])
TIMESTAMP DAY_TYPE MISSING_DATA
T1 8039037
T2 8038611
T3 8038568
T4 8039090
T5 8039177
T6 8037146
在这里,我将只使用POLYLIN列的数据(出租车的运动轨迹)。这里我们定义POLYLIN的第一个位置为上客点,最后一个位置为下客点。
数据预处理
test$POLYLINE[1]
## [1] "[[-8..148522],[-8..148639],[-8..148855],[-8.927],[-8..148963],[-8..148954],[-8..14872],[-8..147847],[-8..14746],[-8..147154],[-8..146623]]"
getCoord=function(x){
x=gsub('[/[]','',x)
x=gsub(']','',x)
x=strsplit(x,',')[[1]]
n=length(x)
lon=as.numeric(x[seq(1,n,2)])
lat=as.numeric(x[seq(2,n,2)])
df=data.frame(lon=lon,lat=lat)
df$status='moving'
df$status[1]='pickup'
df$status[nrow(df)]='dropoff'
return(df)
通过一些处理,我们可以从POLYLINE数据中,提取经纬度,以及出租车的运动状态。
for (i in 1:length(polyline)){
loc=rbind(loc,getCoord(polyline[i]))
lat status
## 1 -8..14852 pickup
## 2 -8..14864 moving
## 3 -8..14885 moving
## 4 -8..14893 moving
## 5 -8..14896 moving
## 6 -8..14895 moving
运用同样的方法, 我们用ggmap画出波尔图的城市地图以及出租车的运动轨迹。
library(ggmap)
map=get_map(location=c(lon=median(loc$lon),lat=median(loc$lat)),
maptype='roadmap',zoom=13)
## Map from URL : http:
plot_taxi=ggmap(map)+labs(x='Longitude',y='Latitude')+
geom_jitter(aes(lon,lat,colour=factor(status)),data=loc[loc$status=='moving',],alpha=0.4)+
geom_point(aes(lon,lat,colour=factor(status)),data=centers,size=10,alpha=0.6)+
geom_jitter(aes(lon,lat,colour=factor(status)),data=loc[loc$status!='moving',],alpha=0.8)
我从未去过葡萄牙,但是我也可以猜到Vitoria是商业中心或者是风景名胜,因为出租车的在那里的运动密度特别大。
我们发现在东北和西北有两个主要的上客和下客地点,推测可能是居住的密集区。如果你注意到图中几个大的点,那是用kmeans聚类的上下客的地点。
the completed R code is available: , if you are interested to check out.
本文已收录于以下专栏:
相关文章推荐
REmap这个包是通过调用百度地图API的一个程序包,与Google的ggmap包相比,不用翻墙就可以使用。其函数主要有:remap(),remapB()、remapC()、remapH()四个。该程...
Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...
前几章对R语言的运行原理、基本语法、数据类型、环境部署等基础知识作了简单介绍,本节将结合具体案例进行验证测试。 案例场景:从互联网下载全国三甲医院数据,以地图作为背景,展现各医院在地图上的分布图。全国...
前言digit recogniser是另一个kaggle入门级别的比赛。这次,我将要介绍一下如何利用机器学习的算法实现图像识别。在这次比赛里,我们要求训练一个模型从像素数据辨认出图片中的数字。比赛中用...
原文链接:.cn/s/blog_5depzqb.html
legend(x, y = NULL, legend, fill ...
据国外媒体报道,人们现在都知道,雅虎公司至少又多了一个有意向其发起收购要约的买家—中国互联网公司阿里巴巴。阿里巴巴CEO马云周五在美国斯坦福大学向听众们表示,他对收购雅虎很有兴趣,他也与几家私人股权投...
这组工具中包含众所周知的热点分析工具,通过这个工具我们能捕获到大量数据中的热点和冷点,对我们分析问题有很大的帮助。例如,在犯罪分析中,我们可以研究哪些位置犯罪频繁并且聚集,对增设警力有重要的辅助作用。...
# 地理空间数据聚类
%matplotlib
import numpy as np,pandas as pd,matplotlib.pyplot as plt
from sklearn...
不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实现?
这里主要介绍下在R语言中绘制地图的个人琢磨的思路。绘制地图步骤有三:
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)3104人阅读
由于ggmap不能正常使用
考虑使用R调用百度地图的API
R中调用地图接口的方法
在R中本来可以直接使用Google地图对应的包RgoogleMaps;ggmap
http://www./visualisation-with-r-and-google-maps/
(1) 百度地图---静态图API接口说明
静态地图的调用不需要AK--key,需要的参数主要是经纬度,再加上一些现实的参数
(2) 百度地图---Geocoding API :Web服务API
需要AK--key
自己注册申请的AK-key:dZaI6FTMf9GBjAKIBwLcOmRS
使用举例:
显示结果:
showLocation&&showLocation({&status&:0,&result&:{&location&:{&lng&:116.,&lat&:40.},&precise&:1,&confidence&:80,&level&:&\u\u&}})
(3) R调用百度地图的过程
目前的业务需要:
a) 根据具体的地理位置获得经纬度信息
b) 根据经纬度获得需要的静态地图
c) 将静态地图处理为R中可处理的对象,如ggmap
d) 使用R根据需要处理该对象
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:81375次
积分:1211
积分:1211
排名:千里之外
原创:36篇
转载:26篇
(6)(2)(2)(1)(2)(6)(3)(1)(8)(13)(4)(1)(3)(7)(2)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 ppt用世界地图 的文章

 

随机推荐