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

绘制中国个省份地图

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

1绘制全中国市级地图

library(rgdal) #提供readOGR()函数

library(ggplot2)

library(dplyr)

library(plyr)

library(grid)

library(RColorBrewer)

library(Cairo) #图片高清导出

library(showtext)

p<-choose.files() #导入bou4_4m/BOUNT_poly.shp文件

dataProjected <- readOGR(p)

dataProjected@data$id <- rownames(dataProjected@data)

这是院dataProjected@data
这是院dataProjected@data
这是加了id后的数据,用于后面merge
这是加了id后的数据,用于后面merge

watershedPoints <- fortify(dataProjected)

watershedPoints数据,保存了polygeon绘制每一个点的坐标,这里id与上面id对应
watershedPoints数据,保存了polygeon绘制每一个点的坐标,这里id与上面id对应

df_China4 <- merge(watershedPoints, dataProjected@data, by = "id")

df_China4数据,相当于为每一个绘制的点加了分组信息,指定县,省等信息,这里ADCODEE99的前两位对应省份信息
df_China4数据,相当于为每一个绘制的点加了分组信息,指定县,省等信息,这里ADCODEE99的前两位对应省份信息

df_China4$province<-substr(as.character(df_China4$ADCODE99),1,2) #提取身份编号

df_China4多了一列province
df_China4多了一列province

mydata<-data.frame(NAME99=unique(df_China4$NAME99),

value=round(runif(length(unique(df_China4$NAME99)),0,10)))

自己的分析数据,例如每个市的人口,工资等等
自己的分析数据,例如每个市的人口,工资等等

df_China<-join(df_China4,mydata,type="full") #这里默认by=NAME99

p<-choose.files()

ProCode <- read.csv(p) # ProCode 包含编号和省份全名

ProCode$ID<-as.character(ProCode$ID)

ProCode数据,其实就是province ID和中文名字的对应
ProCode数据,其实就是province ID和中文名字的对应

for (i in 1:nrow(ProCode)){

df_China$province<- gsub(pattern = ProCode$ID[i], replacement =ProCode$PcCode[i], x = df_China$province)

} #实现省份中文名字替换id

这里province显示的市中文名字了
这里province显示的市中文名字了

df_China$province<-factor(df_China$province,levels=as.character(ProCode$PcCode))

#由于南海地区维度跨度太大,会影响部分省份的显示清晰度,所以将这部分不予以绘制显示

#df_China<-df_China[df_China$NAME99!='南沙群岛' &

df_China$NAME99!='西沙群岛' &

df_China$NAME99!='中沙群岛' &

df_China$NAME99!='中沙群岛的岛礁及其海域', ]

cairo_pdf(file="China.pdf",width=8.42,height=7)

showtext_begin()

ggplot(df_China_hubei, aes(x = long, y = lat,group=group,fill=value)) +

geom_polygon(colour="black",size=0.1) +

scale_fill_gradientn(colours=brewer.pal(9,"Spectral")) +

coord_cartesian()+

theme_void()+

theme(strip.background = element_rect(color="grey60",size=0.25),

panel.background = element_rect(fill=NA,color="grey60",size=0.25))

showtext_end()

dev.off()

2用分面图展示各个省

facet_wrap(~province, ncol = 7,scales="free",strip.position = "top") #在上面代码下加上这一句即可

3只绘制某一个省,这里例如湖北省

df_China_hubei<-df_China[df_China$province == '湖北省',] #提取湖北省的数据即可,其他一样

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1绘制全中国市级地图
  • 2用分面图展示各个省
  • 3只绘制某一个省,这里例如湖北省
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档