前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot绘制地图

ggplot绘制地图

原创
作者头像
爱学习的小明明
修改2020-10-09 15:55:48
1.4K0
修改2020-10-09 15:55:48
举报
文章被收录于专栏:R语言学习R语言学习

直接绘制

library(mapdata)

library(maptools)

library(ggplot2)

library(plyr)

library(mapproj)

library(sp)

library(maps)

china_map<-readShapePoly("D:/Beautiful-Visualization-with-R-master/map/bou2_4p.shp")

plot(china_map) #直接画出来的话地图是扁平的,默认吧进度和纬度作为普通数据,均匀平等对待,绘制在笛卡尔坐标系中。

#因此需要用稿ggplot2提供的coord_map()映射转换坐标系

#bou2表示我们读取的是省级地图,1表示国家层面,数值也大划分越细

使用ggplot的坐标轴映射函数coord_map()

ggplot(data=fortify(china_map))+

geom_polygon(aes(x = long, y = lat, group = id), colour = "black", fill = NA) +

theme_grey()+

coord_map()

提取上海单独绘制

names(china_map)

#可以发现china_map中有925条记录,每条记录中含有面积(AREA)、周长(PERIMETER)、各种编号、中文名(NAME)等字段。其中中文名(NAME)字段是以GBK编码的。

t<-table(iconv(china_map$NAME, from = "GBK"))

t1<-as.matrix(t)

#统计每一个省份或直辖市多边形的数目

city<- as.vector(china_map$ADCODE99)

city_name <- as.vector(china_map$NAME)

city_name_code<-unique(cbind(city,city_name))

#构造一个name和code对应的表,这样就可以将中文的city名称和编号对应起来

#例如提取上海的地图

Shanghai<-china_map[china_map$ADCODE99==310000,]

ggplot(data = fortify(Shanghai)) +

geom_polygon(aes(x = long, y = lat, group = id), colour = "black",

fill = NA) +

theme_grey()

根据统计值大小对不同省份着色

#绘制整个中国地图

x<-china_map@data #读取行政信息,x为dataframe,一共925行

x$id<-seq(0:924)-1

china_map1<-fortify(china_map)

#将china_map转换为数据框,该数据有91040行,其中有一列为id,这里id雨哦们还是那个面构建xs的id一致,即每一个id代表的区域在china_map1中被展开

#china_map1以long,lat即经纬度标识

#这是ggplot专门提供的函数用于SpatialPolygonsDataFrame转换为dataframe

china_map_data<-join(china_map1,x,by="id",type="full") #这里type一定要为full

mycolor<-china_map_data$NAME

mycolor<-unique(mycolor)

r<-runif(length(mycolor)) #随机配色

color_data<-data.frame(NAME=mycolor,ration=r)

china_data<-join(china_map_data,color_data,by="NAME",type="full")

ggplot(china_data,aes(x=long,y=lat,group=id,fill=ration))+

geom_polygon(colour="grey60")+

scale_fill_gradient(low="white",high="red")+

coord_map("polyconic")+

theme(

panel.grid=element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks=element_blank(),

axis.title = element_blank()

)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 直接绘制
  • 使用ggplot的坐标轴映射函数coord_map()
  • 提取上海单独绘制
  • 根据统计值大小对不同省份着色
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档