ggplot2画中国地图
程序员文章站
2022-06-08 13:03:04
...
闲着无聊,画着玩~还是实际工作中能够用到,才会更加熟悉。
还是要专注更重要的部分,这些当做消遣和游戏吧
主要参考资料:
刘万祥老师的新浪博客
R语言中文社区的知乎专栏
发现一个坑:bou2_4p.dbf、bou2_4p.shx、bou2_4p.shp三个文件要放在一个文件下,虽然读取的是bou2_4p.shp
code
# 画省热力图 -------------------------------------------------------------------
##.shp shape文件
###aaa@qq.com:数据框:面积、周长
# bou代表边界的意思,数字1~4代表国家、省、市、县的4级行政划分
# 4m代表比例是400万分之一,这个比例的图形是公开的
#数据其他的格式并不知道是什么鬼啊,只能依葫芦画瓢咯
library(maptools)
library(rgdal)
china_map = readOGR(dsn = "./ggplot2/bou2_4p.shp",stringsAsFactors=FALSE)#读取中国地图空间数据
plot(china_map)
# 但地图投影方式不对,看起来太扁了,完全不是我们常见的昂首雄鸡状。
# 加载ggplot2包,用ggplot绘制,并使用polyconic投影方式,显示正常。
library(ggplot2)
ggplot(china_map,aes(x=long,y=lat,group=group)) +
geom_polygon(fill="white",colour="grey") +
coord_map("polyconic")
############################################################
x <- aaa@qq.com #读取行政信息
xs <- data.frame(x,id=seq(0:924)-1) #含岛屿共925个形状
china_map1 <- fortify(china_map) #转化为数据框,怎么转化的不知道
library(plyr)
china_map_data <- join(china_map1, xs, type = "full") #合并两个数据框
library(readxl)
mydata <- read_excel("./ggplot2/data.xls",sheet=2,col_names = TRUE)
mydata <- as.data.frame(mydata)
china_data <- join(china_map_data, mydata, type="full")
ggplot(china_data, aes(x = long, y = lat, group = group, fill = number)) +
geom_polygon(colour="grey40") +
scale_fill_gradient(low="white",high="steelblue") + #指定渐变填充色,可使用RGB
coord_map("polyconic") #指定投影方式为polyconic,获得常见视角中国地图
#
# R笔记1:ggplot绘制商务图表--中国分省热力地图好,看到填色地图了,这个效果已经比很多教程里的都要好了。
# 但图中的背景色、坐标轴、经纬线都是不需要的,图例也可以放到左下角,用theme命令清除:
ggplot(china_data, aes(x = long, y = lat, group = group,fill = number)) +
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)
)
# 4、添加省名标签
# 有时候需要显示省名标签,特别是给老领导看。可根据每个省形状的经纬度平均值求近似中心位置,标注省名。
#同时添加数值会出现覆盖叠加的情况
midpos <- function(x) mean(range(x,na.rm=TRUE)) #取形状内的平均坐标
centres <- ddply(china_data,.(province),colwise(midpos,.(long,lat)))
prov_num <- merge(x=mydata[,c(2,3)],y=centres,by.x="province")#中心位置经纬度、具体数值
ggplot(china_data,aes(long,lat))+ #此处语法与前面不同,参考ggplot2一书P85
geom_polygon(aes(group=group,fill=number),colour="black")+
scale_fill_gradient(low="white",high="steelblue") +
coord_map("polyconic") +
geom_text(aes(label=province),data=centres) +
geom_text(aes(label=number),data=prov_num) +
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("./ggplot2/chinaprovincecity.csv") #读取省会城市坐标
ggplot(china_data,aes(long,lat))+
geom_polygon(aes(group=group,fill=number),colour="grey60")+
scale_fill_gradient(low="white",high="steelblue") +
coord_map("polyconic") +
geom_text(aes(x = jd,y = wd,label = province), data =province_city,size=3)+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
)
#叠加气泡图
ggplot(china_data, aes(long, lat)) +
geom_polygon(aes(group = group, fill = number), colour = "grey60") +
scale_fill_gradient(low = "white", high = "steelblue") +
coord_map("polyconic") +
geom_text(aes(x = jd, y = wd, label = province),
data = province_city,
size = 3) +
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
) +
geom_point(
data = prov_num,
mapping = aes(x = long, y = lat, size = number),
colour = 'red'
)
result
ref
下一篇: 外链铺广之路如何走? 外链实操战术盘点