我在做重庆地图的过程中遇到需要把主城区挑出来,找遍了市面的地图都没有重庆主城的。还有重庆有三个功能区,地图也是没有的。我自己做了主城的,还有三个功能区的,一共38个区+3个功能区(主城区和38+3,我整理好下次分享给大家)。
小白也能可以顺利完成的。
1、获取地图
阿里云地图等网址下载,下载json格式文件
DataV.GeoAtlas地理小工具系列 (aliyun.com)https://datav.aliyun.com/portal/school/atlas/area_selector2、将保存的json文件转换成phd格式文件,推荐使用小工具:
mapshaperhttps://mapshaper.org/
3、修改地图获取主城地图
4、先看结果
5、R操作代码奉上:
Sys.setlocale(category = "LC_ALL", locale = "Chinese") #设置系统语言为简体中文
#library(tmap) #用来绘图
library(rgdal) #用来读取shp数据
library(RColorBrewer)#用来修改颜色
library(sp)
library(ggplot2)
library(plyr)
library(maps)
library(sf)
library(ggspatial)
library(cowplot)
library(colorspace)
setwd("F:/wjw/1 five")
cq <- readOGR('.', "重庆市", encoding = "UTF-8") #读取地图
Encoding(cq@data$name) <- "UTF-8" ##转换格式为UTF-8
head(cq@data)
data1 <- cq@data
data2 <- data.frame(id=row.names(data1),data1)
cq_ <- fortify(cq) #转化为数据框
cq_map_data <- join(cq_, data2, type = "full")
head(cq_map_data)
mydata1 <- data.frame(read.csv("xxxxx.csv"))
#读取业务指标数据,并与地图数据合并
cq_data <- join(cq_map_data, mydata1, type="full") #合并两个数据框
cq_data[,23]<-factor(cq_data[,23],levels=c("≥200","150~200","100~150","50~100","<50"))
cq_data[,22]<-factor(cq_data[,22],levels=c("≥4%","3~4%","2~3%","1~2%","<1%"))
midpos <- function(data1) mean(range(data1,na.rm=TRUE))
centres <- ddply(cq_data,.(name),colwise(midpos,.(long,lat)))
# 绘图
windowsFonts(myFont = windowsFont("微软雅黑"))
p1 <- ggplot(cq_data, aes(x = long, y = lat)) +
geom_polygon(aes(group=group,fill=xx),colour="white")+
#scale_fill_gradient(low="green",high="red")+
#scale_fill_gradientn(colours = colorRampPalette(brewer.pal(5,'GnBu'))(24))+
coord_map("polyconic") +
geom_text(aes(label=name),size =4,angle = -17,family="myFont",fontface="plain",data=centres)+
ggtitle("xxxx")+
annotation_north_arrow(location='tl', which_north='false',
style=north_arrow_nautical(),
height = unit(2.0, "cm"),
width = unit(2.0, "cm"),
pad_x = unit(37, "cm"),
pad_y = unit(0.75, "cm")) + # 添加指北针
theme(plot.title=element_text(family="myFont",size=32,hjust = 0.5),
panel.grid=element_blank(),
panel.background=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank())
p1<-p1 + scale_fill_manual(values = c("#FF3333","#FFFF66","#99CCFF","#99FF00"))#手动换色
p1
cq_map_data <- data.frame(read.csv("cq_map_data1.csv")) # 修改后的主城区地图
cq_data <- join(cq_map_data, mydata1, type="full") #合并两个数据框
midpos <- function(data1) mean(range(data1,na.rm=TRUE))
centres <- ddply(cq_data,.(name),colwise(midpos,.(long,lat)))
# 绘图
windowsFonts(myFont = windowsFont("微软雅黑"))
p3 <- ggplot(cq_data, aes(x = long, y = lat)) +
geom_polygon(aes(group=group,fill=xxx),colour="white")+
#scale_fill_gradient(low="green",high="red")+
#scale_fill_gradientn(colours = colorRampPalette(brewer.pal(5,'GnBu'))(24))+
coord_map("polyconic") +
geom_text(aes(label=name),size =4,angle = -17,family="myFont",fontface="plain",data=centres)+
ggtitle(NULL)+guides(fill=F)+
# guides(fill=guide_legend(title=NULL))+
theme(plot.title=element_text(family="myFont",size=32,hjust = 0.5),
panel.grid=element_blank(),
panel.background=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank())
p3<- p3 + scale_fill_manual(values = c("#99FF00","#FF3333","#99CCFF","#FFFF66","#FF9966"))#手动换色
p3
png('cq0518.png',bg="transparent",
width = 5000, height = 4500, res=300)
library(cowplot)
P <- ggdraw(p1)+
draw_plot(p3,x=-0.25,y=-0.07,scale = 0.25,width = 1,height = 1.6)
P
dev.off()