如何用R直接调用好用的世界地图图

利用R绘制个性化的世界地图_future张帆_新浪博客
利用R绘制个性化的世界地图
最近想统计下收集的材料来源分布情况,因此将这些材料按照地域来源进行区分,并将它们呈现在地图上。
1、经纬度信息获取
将地理信息通过获得经纬度信息​
&直接填写地名就能获得经纬度信息
2、将所有经纬度信息整理到Excel表格中(最后一列number是材料份数)​
3、 R语言中实现可视化​
mydata&-read.table("gzwj.csv",header=TRUE,sep=",")
visit.x&-mydata$Longitude
visit.y&-mydata$Latitude #数据准备
library(ggplot2)
library(ggmap)
library(sp)
library(maptools)
library(maps)
#导入需要的按照包,如果没有相关的包可通过install.packages("xxx")获得
mp&-NULL #定义一个空的地图
mapworld&-borders("world",colour =
"gray50",fill="white") #绘制基本地图
mp&-ggplot()+mapworld+ylim(-60,90)
#利用ggplot呈现,同时地图纵坐标范围从-60到90
mp2&-mp+geom_point(aes(x=visit.x,y=visit.y,size=mydata$number),color="darkorange")+scale_size(range=c(2,9))
#绘制带点的地图,geom_point是在地图上绘制点,x轴为经度信息,y轴为纬度信息,size是将点的大小按照收集的个数确定,color为暗桔色,scale_size是将点变大一些
mp3&-mp2+theme(legend.position = "none")
#将图例去掉
mp3 #将地图呈现出来
最终效果图
参考信息:​
1.本文代码地址:​
2.地图经纬度查找网址:​
3.颜色查找网址:​
4.代码参考地址:​
future张帆
博客等级:
博客积分:0
博客访问:15,723
关注人气:0
荣誉徽章:R语言在线地图神器:Leaflet for R包(三) 符号标记_其它编程-织梦者
当前位置:&>&&>& > R语言在线地图神器:Leaflet for R包(三) 符号标记
R语言在线地图神器:Leaflet for R包(三) 符号标记
点标记在地图符号化的时候,是最常用的功能之一,一般来说,带有经纬度坐标的点信息,在地图上标志的位置,都会通过一个标记物来实现,很多时候把这个东东称之为“图钉”是非常形象的。
标记的方法名和语法如下:
addMarkers(leaflet地图,数据)
表示把这个数据加载到地图里面,示例如下:
df = data.frame(
latitude = runif(20,min=0,max=70),
longitude = runif(20,min=0,max=160)
m &- leaflet(data=df)
m&- addTiles(m)
addMarkers(m,lng=~longitude,lat=~latitude)
#管道操作符写法
df%&%leaflet()%&%addTiles()%&% addMarkers()
这是一批北京市三级医院的数据,需要这份示例数据的,可以通过公众号获取虾神的邮箱,然后发送邮件给我获取。
bj3H &- read.csv(&E:/bj3H.csv&)
leaflet(bj3H)%&%addTiles()%&% addMarkers(popup=~mc)
如果还是直接写,会出现错误提示,说找不到经纬度的列
如果你觉得这种默认的图钉样式不好看,还可以定制自己的符号,比如我下面想用红十字来表示医院:
首先用makeIcon这个方法,来定义一个图标,注意里面Url必须是要用http模式,我这里用csdn提供的免费图床,本地硬盘上的图片好像是不能直接用的。(ps:如果不想用互联网的图床,也可以在本地开启一个web服务器,使用url方式来引用)。
makeIcon的语法如下:
iconUrl : 图标的url地址
iconWidth :图标的宽度
iconHeight: 图标的高度
iconAnchorX :图标的中心点x轴偏移(以左上角为0,0)
iconAnchorY :图标的中心点Y轴偏移(以左上角为0,0)
redIcon &- makeIcon(
iconUrl = &http://img.blog.csdn.net/50664&,
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
leaflet(bj3H[])%&%addTiles()%&%
addMarkers(popup=~mc,icon = redIcon)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//de.png" iconUrl = &http://img.blog.csdn.net/50664&,
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
redIcon2 &- makeIcon(
iconUrl = &http://img.blog.csdn.net/07516&,
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
leaflet()%&%addTiles()%&%
addMarkers(data=bj3H[bj3H$dj==&三级&,],popup=~mc,icon = redIcon1)%&%
addMarkers(data=bj3H[bj3H$dj==&三级甲等&,],popup=~mc,icon = redIcon2)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//273ef7d461d3a4e656dc201.png" iconUrl = ifelse(bj3H$dj==&三级&,
&http://img.blog.csdn.net/50664&,
&http://img.blog.csdn.net/07516&
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
leaflet(bj3H)%&%addProviderTiles(&CartoDB.Positron&)%&%
addMarkers(popup=~mc,icon = leafIcons)
那么下面我用十种不同类型的图标,来进行分类标识:
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//017bc8bef3eaec.png" 中国医科院所属医院 = makeIcon(&http://img.blog.csdn.net/59390&, iconWidth =32, iconHeight = 32),
北京区县属医院 = makeIcon(&http://img.blog.csdn.net/17958&, iconWidth =32, iconHeight = 32),
北京市卫生局直属医院= makeIcon(&http://img.blog.csdn.net/15828&,iconWidth =32, iconHeight = 32),
北京中医药大学= makeIcon(&http://img.blog.csdn.net/34175&,iconWidth =32, iconHeight = 32),
卫生部直属医院= makeIcon(&http://img.blog.csdn.net/50879&,iconWidth =32, iconHeight = 32),
中国中医科学院= makeIcon(&http://img.blog.csdn.net/31737&,iconWidth =32, iconHeight = 32),
驻京武警医院= makeIcon(&http://img.blog.csdn.net/43285&,iconWidth =32, iconHeight = 32),
驻京部队医院= makeIcon(&http://img.blog.csdn.net/54598&,iconWidth =32, iconHeight = 32),
部属厂矿高校医院= makeIcon(&http://img.blog.csdn.net/09473&,iconWidth =32, iconHeight = 32),
北京大学附属医院= makeIcon(&http://img.blog.csdn.net/32521&,iconWidth =32, iconHeight = 32)
leaflet(bj3H) %&%addProviderTiles(&CartoDB.Positron&) %&%
addMarkers(icon = ~yyIcons[fl],popup=~fl)
而如果不想弄得这么麻烦,就是直接把点显示出来,leaflet提供了最简单的方法:
addCircles()和addCircleMarkers()
addCircles就是直接把点当成一个圆点绘制到地图上:
leaflet(bj3H) %&%addProviderTiles(&CartoDB.Positron&)%&%addCircles()
而addCircleMarkers()是把点作为一个镶边的圆(或者说圆符号)绘制到地图上:
leaflet(bj3H) %&%addProviderTiles(&CartoDB.Positron&)%&%addCircleMarkers()
和绘制图标一样,绘制点和圆也是可以设置分类显示的,方法和绘制不同种类的图标一样,两种方法:
1、采用筛选的方式,多次绘制(这个比较麻烦,数据量大,种类多的时候很繁琐)
leaflet()%&%addTiles()%&%addProviderTiles(&CartoDB.Positron&)%&%
addCircles(data=bj3H[bj3H$dj==&三级&,],popup=~mc,color=&green&)%&%
addCircles(data=bj3H[bj3H$dj==&三级甲等&,],popup=~mc,color=&red&)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//5a32e9a08c21edb765eaa851cbfd9391.png" addCircleMarkers(data=bj3H[bj3H$dj==&三级&,],popup=~mc,color=&green&)%&%
addCircleMarkers(data=bj3H[bj3H$dj==&三级甲等&,],popup=~mc,color=&red&)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//121cfe95a6e83f443abc894.png" addCircleMarkers(color = ~pal(dj),stroke = FALSE,fillOpacity = 0.7)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//ba4c2d872fd.png" addCircleMarkers(fillColor = ~cPal(bj3H$cws),stroke = FALSE,fillOpacity = 0.8,popup=~as.character(cws))%&%
addLegend(&bottomright&, pal = cPal, values = ~cws,title = &床位数&,labFormat = labelFormat(suffix = &张&),opacity = 1)
<img alt="R语言在线地图神器:Leaflet for R包(三) 符号标记" src="http://img.zhimengzhe.com/d/file/p//5cbbbe84.png"
以上就是R语言在线地图神器:Leaflet for R包(三) 符号标记的全文介绍,希望对您学习和使用程序编程有所帮助.
这些内容可能对你也有帮助
更多可查看其它编程列表页。
猜您也会喜欢这些文章R语言和中国地图 - 小麦粒 - 博客园
随笔 - 34, 文章 - 0, 评论 - 0, 引用 - 0
上图是R语言绘制的按地域分布的数据图。更科学,更严谨,也更有质感的样子。
今天瞎写点东西,我在想数据分析的意义是什么,也许就是研究事物存在的形式。而事物存在的形式是什么样子呢,从最初的三维空间,爱因斯坦伯伯把时间也拉了进来,于是时间作为一种变化的空间而存在着,成为第四维。现在好像还发现了第五空间,可能是人的心理空间或者意识空间,还有人说是曲率,不一而足。个人认为i,所有的事物应该都是彼此联系的,没有单纯的独立的与其他东西绝缘的存在。而人的内心,人的思维目前确实是独立于其他四维的空间。所以他应该是另一种存在,但应该以一种其他的形式,可以和其他维度相统一的形式。波么? 还是更细的粒子?亦或是更加悬而未远的东西。
拉回数据分析,数据分析常用的维度吧,时间,空间,以及复杂的人群分布(人的各种属性,造成了各种人群的分布)。而空间,R语言有一些MAP的方法。于是站在巨人的肩膀上,今天来画地图吧。
基本MAP方法:
1.世界地图:有一些R包中存储着常见地图的数据,比如maps包中存有世界地图、美国地图、美国各州郡地图、法国地图以及加拿大城市地图等,加载了这个包,就可以轻松愉快地绘制上述地图。mapdata包中存有中国地图的数据,但是比较旧了,这个数据,重庆还没有从四川分出来呢。
library(maps)
map("world", fill = TRUE, col = rainbow(200),
ylim = c(-60, 90), mar = c(0, 0, 0, 0))
title("世界地图")
2.中国地图:
调取maptools,ggplot2,mapproj 包,读入大神自己改编绘制的中国维度图。
library(maptools)
x=readShapePoly('bou2_4p.shp')
library(ggplot2)
library(mapproj)
#可以看到中国地图的框框
为了进一步在ggplot2包中绘图,需要把SpatialPolygonsDataFrame数据类型转化为真正的data.frame类型才可以。
ggplot2包专门针对地理数据提供了特化版本的fortify函数来做这个工作
用这个函数将X 烹饪一下,
geom_polygon 是多边形填充路径的函数,而地图其实就是一个多边形的各种组合,于是用这种函数,画地图很合适。
mymap=ggplot(data = fortify(x))+geom_polygon(aes(x=long,y=lat,group=id),colour="black",fill=NA)+theme_grey()
print(mymap+coord_map())
到此,可以看到一个手绘中国地图。
第二步,我将我想放入的数据,整到这个地图上,
ch = fortify(x,region = 'NAME')
#拿出各省的编码数据,从"GBK" 格式转换
ch = transform(ch,id=iconv(id,from = 'GBK'),group = iconv(group, from = 'GBK'))
names(ch)[1:2] = c("x","y")
#省份去重且排序
mychdat = data.frame(id = unique(sort(ch$id)))
t&-read.table("首次购用户分布.csv",header=TRUE,sep=",")
mychdat$users &- t$users
tmp= coordinates(x)tmp = as.data.frame(tmp)
tmp$names = x$NAME
#画图,还带标签哦,路盲不怕了
chmap = ggplot(mychdat) + geom_map(aes(map_id = id, fill = users), color = "white", map = ch) +geom_text(aes(x = V1,y = V2,label = names), family = "GB1", data = tmp)+ scale_fill_gradient(high = "darkblue",low = "lightblue") + expand_limits(ch) + coord_map()
print(chmap)
注,family="GB1"是一种字体
好了,今天就到这吧.
================================补充=================================================
将昨晚的code放入运行了一遍,发现根本不行,x是以最细的维度,所以有字标不能用这种方法。
搞了一份,省份经度纬度的资料
城市,Jd,Wd
北 京,116..9
上 海,121..
天 津,117..15
重 庆,106..
哈尔滨,126..75
长 春,125..
沈 阳,123.4,41.
呼和浩特,111.8,40.
石家庄,114..
太 原,112..
济 南,117,36.
郑 州,113.7,34.8
西 安,108.9,34.
兰 州,103..05
银 川,106..
西 宁,101.75,36.
乌鲁木齐,87.6,43.8
合 肥,117.3,31.85
南 京,118..
杭 州,120.15,30.
长 沙,113,28.
南 昌,115..
武 汉,114.35,30.
成 都,104..65
贵 阳,106.7,26.
福 州,119.3,26.
台 北,121..05
广 州,113.25,23.
海 口,110..
南 宁,108..8
昆 明,102.
拉 萨,91..
香 港,114..3
澳门,113.5,22.2按照这个省会资料,重新读取作为地图的标示代码是这样的
capdate&-read.table("province.csv",header=TRUE,sep="\t")head(capdate)
chmap = ggplot(mychdat) + geom_map(aes(map_id = id, fill = users), color = "white", map = ch) +geom_text(aes(x = Jd,y = Wd,label = provice), family = "GB1",size=2, data = capdate)+ scale_fill_gradient(high = "darkblue",low = "lightblue") + expand_limits(ch) + coord_map()
print(chmap)
最终出来的效果是这样的r语言怎么把数据标到地图上面去_百度知道
r语言怎么把数据标到地图上面去
我有更好的答案
(约等于废话)你得有要绘制地图的地理信息,经纬度啊。第三种思路,具体可参考《利用googleVis包实现环境数据可视化》(友情提示,于是ggmap包诞生了,越艰辛。于是第三种的思路,就是既继承了第一种思路简洁的操作方式、法国地图以及加拿大城市地图等,加载了这个包,还是提醒我们,尽量化繁为简??,最终绘制出地图的那一刻的快感就越强烈,但是“少折腾”的指示,如果各个包中都没有梵蒂冈的信息,那咋办啊(其实可以通过绘制世界地图、美国各州郡地图,就可以轻松愉快地绘制上述地图。mapdata包中存有中国地图的数据,这样就不会受包中数据集所限,需科学上网)。之后的OpenStreetMap包也是提供了方便下载地理数据的途径。如您所看到的,但是比较旧了,这个数据,这样:这里主要介绍下在R语言中绘制地图的个人琢磨的思路,第一种思路受包中已有的数据数量限制(但我R包多。后来肖凯老师又介绍googleVis包也可以按照这个思路来绘制地图。R语言中绘制地图的思路也是由于2的获取方式不一样而分开的。第一种思路:有一些R包中存储着常见地图的数据,又吸取了第二种思路的数据来源广泛的优势,谢老大的《终于搞定中国分省市地图》一文中就介绍了,先从国家基础地理信息中心下载中国各省市的地理数据,目前的限制是2000次(应该是单天的限制),如果我想画中国人民大学的地图怎么办,然后限制区域把梵蒂冈画出来)。而且!),当然Google大爷不会让你无限制的取数据,之后再绘制,就跟全民调戏小黄鸡一样。绘制地图步骤有三:你得需要绘制地图,一旦2的数据有了,在R中不就是把它们连起来嘛,这个对于R来说就是调戏它,重庆还没有从四川分出来呢。总体来讲,Baidu Map等,这可都是专业的地图网站,里面的地理数据应有尽有,想取啥取啥。自由的R只需要连接Google Map的API,一切就都有了您好:既然R是自由的,第二种途径的步骤稍多,不利于大家上手。我知道,如果过程越长?哭……第二种思路:我先去一个地方下载所画图的地理数据,然后读入R进行绘制。比如由于mapdata中的中国地图比较久远了,那我能不能直接去调取专业的地图企业或者网站的数据呢;你得利用2的数据在R中画出来。以上步骤中,目前最关键的是2,边界啊等等,我只需要有一个途径去专业的地图供应商那取数据就可以了,比如Google Map,比如maps包中存有世界地图、美国地图
为您推荐:
其他类似问题
r语言的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 世界地图软件哪个好用 的文章

 

随机推荐