由于绘图涉及到国家领土主权问题,还是严谨一些为好,在上一篇基础上,主要参考了R 绘制渐变中国地图及添加南海九段图的思路,代码非常详细,以及用ggplot2包绘制带南海诸岛的热力地图这篇,都是在原有地图基础上嵌套了包含南海诸岛和九段线的图。数据可从中国国家基础地理信息数据网站中获得。改成自己的数据跑一下代码试试看:
library(mapdata)
library(maptools)
library(ggplot2)
library(plyr)
library(rgdal)
library(sp)
#fork 九段线
l9<-rgdal::readOGR("E:\\rstudy\\Rchina\\SouthSea\\九段线.shp")
#读取地图数据
china_map=readShapePoly("E:\\rstudy\\Rchina\\china\\bou2_4p.shp")
ggplot(china_map,aes(x=long,y=lat,group=group)) +
geom_polygon(fill="white",colour="grey") +
coord_map("polyconic") #用polyconic投影
x <- china_map@data #读取行政信息
xs <- data.frame(x,id=seq(0:924)-1) #含岛屿共925个形状
china_map1 <- fortify(china_map) #转化为数据框
china_map_data <- join(china_map1, xs, type = "full") #合并两个数据框
unique(china_map@data$NAME) #查看地图数据省份名称并确保填色数据与其一致
#读取填色数据
mydata<-read.csv("E:\\rstudy\\te.csv")
china_data <- join(china_map_data, mydata, type="full") #合并数据框
china_data$te <- cut(china_data$te,breaks=c(0,0.25,0.5,0.75,1.01),labels=c('0.00~0.25','0.25~0.5','0.50~0.75','0.75~1.00'),right=FALSE,order=TRUE) #切分数据
windowsFonts(myFont = windowsFont("Times New Roman"))
rhg_cols1 <- c("#F0FFF0","#C1FFC1","#9BCD9B","#698B69") #分级填充颜色
province_city <- read.csv("E:\\rstudy\\Rchina\\chinaprovincecity2.csv") #省会坐标
#绘制主图
p1 <- ggplot(china_data, aes(x = long, y = lat)) +
geom_polygon(aes(group = group, fill = te),colour="black",size=0.05) +
scale_fill_manual(values=rhg_cols1)+
guides(fill=guide_legend(title='te '))+
coord_map("polyconic") +
geom_text(size=3,aes(x = jd,y = wd,label = province), hjust=0.5,vjust=0.5,data =province_city)+ #添加省会标签
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), #图例位置
legend.text = element_text(size=10), #图例字体大小
legend.key.size =unit(15, "pt"), #图例元素大小
legend.title.align=0.5 #图例标题居中
)
p1
#绘制小图
p2<-ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),color="grey40",fill="white")+ #绘制分省图
scale_fill_manual(values=rhg_cols1)+
geom_line(data=l9,aes(x=long,y=lat,group=group),color="red",size=0.5)+ #9段线
coord_cartesian(xlim=c(105,125),ylim=c(3,30))+ #缩小显示范围在南部区域
theme(
aspect.ratio = 1.25, #调节长宽比
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
panel.grid = element_blank(),
panel.background = element_blank(),
panel.border = element_rect(fill=NA,color="gray60",linetype=1,size=0.8),
plot.margin=unit(c(0,0,0,0),"mm"))
#嵌合2个图
library(grid) #ggplot也是grid图
vie <- viewport(width=0.15,height=0.10,x=0.68,y=0.25) #定义小图的绘图区域
p1 #绘制大图
print(p2,vp=vie) #在p1上按上述格式增加小图
绘图效果就酱啦~