欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

ggplot2画中国地图

ref

[1] 手把手教你使用ggplot2绘制中国地图
[2] R笔记1:ggplot绘制商务图表–中国分省热力地图