ggplot2画中地图

闲着无聊,画着玩~还是实际工作中能够用到,才会更加熟悉。
还是要专注更重要的部分,这些当做消遣和游戏吧
主要参考资料:
刘万祥老师的新浪博客
R语言中文社区的知乎专栏
发现一个坑:bou2_4p.dbf、bou2_4p.shx、bou2_4p.shp三个文件要放在一个文件下,虽然读取的是bou2_4p.shp

code

# 画省热力图 -------------------------------------------------------------------
##.shp shape文件
###china_map@data:数据框:面积、周长 
# 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 <- china_map@data          #读取行政信息
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

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

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值