我的舰娘r找不到活动百度地图工具栏找不到,怎么回事

R语言之地图绘制_实践者_新浪博客
R语言之地图绘制
一、用R语言画地图的思路:
1、第一种思路:有一些R包中存储着常见地图的数据,比如maps包中存有世界地图、美国地图、美国各州郡地图、法国地图以及加拿大城市地图等,加载了这个包,就可以轻松愉快地绘制上述地图。mapdata包中存有中国地图的数据,但是比较旧了,这个数据,重庆还没有从四川分出来呢。​
1)画世界地图:
如果是首次使用,需要在R中装载maps包(install.packages('maps')),这个包中存有世界地图和美国地图的地图数据​
install.packages('maps')
​library(maps)
map("world", fill = TRUE, col = rainbow(200),ylim
= c(-60, 90), mar = c(0, 0, 0, 0))
​title("世界地图")
2) 画中国地图:
library(maps)
install.packages("mapdata")​
library(mapdata)
​map("china", col = "red4", ylim = c(18, 54),
panel.first = grid())
title(" 中国地图")​
2、第二种思路:先去一个地方下载所画图的地理数据,然后读入R进行绘制。比如由于mapdata中的中国地图比较久远了,先从国家基础地理信息中心下载中国各省市的地理数据,之后再绘制。之后的OpenStreetMap包也是提供了方便下载地理数据的途径。
下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下,并在R中设好相应的工作空间,然后安装maptools包,运行如下程序:
​&install.packages("maptools")
library(sp)​
library(maptools)​x=readShapePoly('bou2_4p.shp')
plot(x)​
​ggplot(x,aes(x=long,y=lat,group=group))+geom_polygon(fill="white",colour="grey")
+coord_map("polyconic")
xz &- x@data
&#读取行政信息
data.frame(x,id=seq(0:924)-1)&&
&#含岛屿共925个形状
library(ggplot2)
china_map1 &- fortify(x) &
& #转化为数据框
library(plyr)
china_map_data &- join(china_map1, xs, type
= "full") & & &
#合并两个数据框
准备业务数据
网上教程居然都是在命令行里输入数据,也很坑爹。我们还是从Excel表格转存来得方便。按以下格式准备好指标数据,并存为csv格式文件。不直接读取xlsx文件是因为需要装的包比较麻烦。
各省名称是用以下命令查看并记下的。​
​unique(x@data$NAME)
下面读取业务指标数据,并与地图数据合并:
read.csv("c:/rstudy/geshengzhibiao.csv")
& &#读取指标数据,csv格式
china_data &- join(china_map_data, mydata,
type="full") & &
&#合并两个数据框
现在可以开始试试画填色地图了:
ggplot(china_data, aes(x = long, y = lat, group = group,
fill =&zhibiao)) +
geom_polygon(colour="grey40") +
scale_fill_gradient(low="white",high="steelblue") +
&#指定渐变填充色,可使用RGB
coord_map("polyconic")&&
&#指定投影方式为polyconic,获得常见视角中国地图
好,看到填色地图了,但图中的背景色、坐标轴、经纬线都是不需要的,图例也可以放到左下角,用theme命令清除:
​ggplot(china_data, aes(x =
long, y = lat, group = group,fill
=&zhibiao)) +
geom_polygon(colour="grey40") +
scale_fill_gradient(low="white",high="steelblue") +
&#指定渐变填充色,可使用RGB
coord_map("polyconic") + & &
& #指定投影方式为polyconic,获得常见视角中国地图
theme( & &
& & #清除不需要的元素
& &panel.grid =
element_blank(),
& &panel.background =
element_blank(),
& &axis.text =
element_blank(),
& &axis.ticks =
element_blank(),
& &axis.title =
element_blank(),
& &legend.position =
c(0.2,0.3)
​有时候需要显示省名标签,特别是给老领导看。可根据每个省形状的经纬度平均值求近似中心位置,标注省名。
midpos &- function(x)
mean(range(x,na.rm=TRUE))#取形状内的平均坐标
centres &-
ddply(china_data,.(province),colwise(midpos,.(long,lat)))
​ggplot(china_data,aes(long,lat))+
#此处语法与前面不同,参考ggplot2一书P85
geom_polygon(aes(group=group,fill=zhibiao),colour="black")+
scale_fill_gradient(low="white",high="steelblue") +
coord_map("polyconic") +
geom_text(aes(label=province),data=centres) +
& & theme(
& &panel.grid =
element_blank(),
& &panel.background =
element_blank(),
& &axis.text =
element_blank(),
& &axis.ticks =
element_blank(),
& &axis.title =
element_blank()
​但发现海南两个字跑到南海去了,不行。下面改使用省会城市的经纬度数据标注省名。
province_city &-
read.csv("c:/rstudy/chinaprovincecity.csv")
&#读取省会城市坐标
ggplot(china_data,aes(long,lat))+
geom_polygon(aes(group=group,fill=zhibiao),colour="grey60")+
scale_fill_gradient(low="white",high="steelblue") +
coord_map("polyconic") +
geom_text(aes(x = jd,y = wd,label = province), data
=province_city)+
& & theme(
& &panel.grid =
element_blank(),
& &panel.background =
element_blank(),
& &axis.text =
element_blank(),
& &axis.ticks =
element_blank(),
& &axis.title =
element_blank()
至此,终于DIY绘制出了一份中国分省的热力地图,真是够折腾够找虐的,好在图形很精准,以后也可以复用代码。
​但是在实际使用的过程中,我们往往会根据自己的需要对地图中的某些省份着以特定的颜色,这时就可以通过调节plot命令中的col参数来予以实现。​
plot(x,col=gray(924:0/924))​
​如何获取某一个特定地区的ID,进而设置我们想要的颜色?
​在R中输入“x[[2]]”或“x$att.data”,会得到一个925行7列的数据框,这其实是bou2_4p.dbf这个文件中存储的信息,之前的read.shape()函数虽然读取的是bou2_4p.shp文件,但在默认情况下会把dbf文件的信息也放到变量之中。对于这个数据框,其行名就是每一个区域的ID编号,第一列和第二列分别是面积和周长,最后一列是该区域所属的行政区名,其它的列应该也是一些编号性质的变量。于是,通过查找相应的行政区对应的行名,就可以对fg参数进行赋值了。下面是我编的一个函数,用来生成所需的col向量:
getColor=function(mapdata,provname,provcol,othercol)&
{ & &f=function(x,y)
& ifelse(x %in% y,which(y==x),0);
colIndex=sapply(mapdata@data$NAME,f,provname);&
col=c(othercol,provcol)[colIndex+1];&
&return(col);&
其中mapdata是存放地图数据的变量,在上面的例子中就是x,provname是需要改变颜色的地区的名称,provcol是对应于provname的代表颜色的向量(名称和数字均可),othercol是其它地区的颜色。举例如下:
provname=c("北京市","广东省","海南省","重庆市");
provcol=c("red","green","yellow","purple");
plot(x,col=getColor(x,provname,provcol,"white"));​
as.character(na.omit(unique(x@data$NAME)))
[1] "黑龙江省" & &
& & "内蒙古自治区" &
& "新疆维吾尔自治区" "吉林省" &
&[5] "辽宁省" &
& "甘肃省" & &
& & & "河北省"
& & "北京市" &
&[9] "山西省" &
& "天津市" & &
& & & "陕西省"
& & "宁夏回族自治区"
[13] "青海省" & &
& & & "山东省"
& & "西藏自治区" &
& & "河南省" &
[17] "江苏省" & &
& & & "安徽省"
& & "四川省" &
& "湖北省" & &
[21] "重庆市" & &
& & & "上海市"
& & "浙江省" &
& "湖南省" & &
[25] "江西省" & &
& & & "云南省"
& & "贵州省" &
& "福建省" & &
[29] "广西壮族自治区" & "台湾省" &
& "广东省" & &
& & & "香港特别行政区"
[33] "海南省" &
​由此生成的向量有33个元素,少了澳门特别行政区,这是这个数据中的一块瑕疵。在x$att.data的第899行有一个NA,不知道它代表的是否就是澳门。
​利用类似的方法就可以根据自己的需要对不同的区域进行着色,下面再举一例。从国家统计局获取2007年我国各地区的人口数据,然后根据人口的多少对各省份进行着色。程序如下:
​provname=c("北京市","天津市","河北省","山西省","内蒙古自治区",
"辽宁省","吉林省","黑龙江省","上海市","江苏省", "浙江省","安徽省","福建省","江西省","山东省",
"河南省","湖北省","湖南省","广东省", "广西壮族自治区","海南省","重庆市","四川省","贵州省",
"云南省","西藏自治区","陕西省","甘肃省","青海省", "宁夏回族自治区","新疆维吾尔自治区","台湾省",
"香港特别行政区");
pop=c(43,98,58,7625,
6,14,284,,
552,610,3);
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@data[index,]);
&return(as.numeric(ids)); }
midchina=c("河南省","山西省","湖北省","安徽省","湖南省","江西省");
​plot(x, col = getColor(x, midchina,
rep("green", 6),"white"), border = "white", xlab = "", ylab =
最后要说的是,在画出的图上仍然可以用points()函数和text()函数加上点和文字,而maptools包中还提供了一个pointLabel()函数,用来解决文本标签的重叠问题。
用googleVis包的另一种方法
&install.packages("googleVis")
library(googleVis)
provname=c("CN-11","CN-12","CN-13","CN-14","CN-15","CN-21","CN-22","CN-23","CN-31","CN-32","CN-33","CN-34","CN-35","CN-36","CN-37","CN-41","CN-42","CN-43","CN-44","CN-45","CN-46","CN-50","CN-51","CN-52","CN-53","CN-54","CN-61","CN-62","CN-63","CN-64","CN-65");
pop=c(110.56,112.51,113.43,112.52,108.45,112.83,111.23,109.71,110.64,116.51,113.86,127.85,117.93,114.74,112.17,118.46,128.18,126.16,130.30,125.55,135.64,115.13,116.01,107.03,108.71,102.73,122.10,114.82,110.35,108.79,106.12)
a&-data.frame(provname,pop)
G2 &- gvisGeoChart(a, locationvar='provname',
colorvar='pop',options=list(region='CN',displayMode="regions",resolution="provinces",colorAxis="{colors:
['yellow','red']}" ))
​&plot(G2)
省份顺序:"北京市","天津市","河北省","山西省","内蒙古自治区",&&"辽宁省","吉林省","黑龙江省","上海市","江苏省",&&"浙江省","安徽省","福建省","江西省","山东省",&&"河南省","湖北省","湖南省","广东省",&&"广西壮族自治区","海南省","重庆市","四川省","贵州省",&&"云南省","西藏自治区","陕西省","甘肃省","青海省",&&"宁夏回族自治区","新疆维吾尔自治区"​
因为这个过程需要连接Google服务器,所以要翻墙才能显示。
3、第三种思路:既然R是自由的,可以直接去调取专业的地图企业或者网站的数据,这样就不会受包中数据集所限,比如Google
Map,Baidu Map等。自由的R只需要连接Google
Map的API,一切就都有了,当然Google不会让你无限制的取数据,目前的限制是2000次(应该是单天的限制),于是ggmap包诞生了,两位作者David
Kahle和 Hadley Wickham真是太会解放全球人民了。
​install.packages("ggmap")
library(ggplot2)
library(ggmap)
​强力介绍ggmap包,先来说下该包让我惊讶的几个命令:
geocode():可以返回一个地方的经纬度
geocode("Guangzhou")​
mapdist():可以返回两地的距离
mapdist('China Agricultural University','Renmin
University of China', 'walking')
3)画中国地图:
​library(ggmap)&
library(mapproj)
map &- get_map(location = 'China', zoom
ggmap(map)
博客等级:
博客积分:0
博客访问:12,871
关注人气:0
荣誉徽章:

我要回帖

更多关于 百度地图工具栏找不到 的文章

 

随机推荐