很多时候我们需要表示不同地区的某个值,那表示的方法有两种,第一种是地图+热力图,用地图上的颜色表示值得大小,另一种是地图+气泡图,用气泡大小来表示值,当然颜色也可以表示其他参数。
本篇主要讲解地图+气泡图如何画出
数据准备:
1、地图所需数据:全国地图GIS文件
2、气泡图所需数据:城市名称,经度,维度,具体数值,如图
实现原理:
将图分解开来,发现是地图+气泡图,我们需要画出地图。那如何讲气泡图展示在地图上呢,将位置对应到地图上的x,y轴,也就是经度和维度,然后就可完美的画图地图了
R代码:
#chinamap
setwd("C:\\Users\\a\\Desktop")
library(gpclib)
library(ggplot2)
library(maps)
library(maptools)
#读取各省的边界数据等
shape <- readShapePoly("socialbeta/china-province-border-data/bou2_4p.shp")
#转化数据格式,可以用fortify()函数替代
shape@data$id <- rownames(shape@data)
shape.fort <- fortify(shape, region='id')
shape.fort<-shape.fort[order(shape.fort$order), ]
#获取气泡图数据
city<-read.csv('大众点评杭州民宿用户画像.csv')
#建立函数,将背景全部取消
theme_clean <- function(base_size=12){
require(grid)
theme_grey(base_size)
theme(
axis.title = element_blank(),
axis.text = element_blank(),
panel.background = element_blank(),
panel.grid = element_blank(),
axis.ticks.length = unit(0, "cm"),
axis.ticks.margin = unit(0, "cm"),
panel.margin = unit(0, "lines"),
plot.margin = unit(c(0,0,0,0), "lines"),
complete = TRUE
)
}
#画图地图+气泡图
mymap = ggplot(data = shape.fort) +
geom_polygon(aes(x = long, y = lat, group = group), colour = "grey",fill='white')
mymap2<-mymap + coord_map()+geom_point(data=city,aes(x=经度,y=维度,size=人数,color=地域))
#添加标签,取消图例(因为图例太长。。),保存图片
map<-mymap2
+ theme_clean()+theme(legend.position='none')+geom_text(data =city,
aes(x=经度,y=维度,label =地域),vjust=-0.5,hjust=-1,size=1.5)
ggsave('map.png',map)
最终效果,由于数据相差较大,且集中在江浙沪,故其他地区的气泡较小
网友评论