R语言可视化——地图与气泡图结合应用

今天跟大家分享如何在地图上进行散点图、气泡图绘制。

昨天跟大家介绍了ggplot函数进行地图绘制的原理,通过轮廓点和分组来定义每一个地区(国家边界),通过多边形填充来完成区域填色。

ggplot的图层叠加原理允许许我们在坐标系统的叠加多个图层;

所以在地图上叠加散点、甚至气泡可以很容易的实现:

包的导入:

1
2
3
library(maptools)
library(ggplot2)
library(plyr)

导入地理信息数据:

1
2
china_map <- readShapePoly("c:/rstudy/bou2_4p.shp") # 读取地图信息数据
china_map1 <- fortify(china_map) #转化为数据框

业务数据导入及作图数据合并:

1
2
3
mydata <- read.csv("c:/rstudy/geshengzhibiao.csv") #读取业务数据
province_city <- read.csv("c:/rstudy/chinaprovincecity.csv") #读取省会城市坐标
china_data <- join(province_city, mydata, type="full") #合并两个数据框

地图语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ggplot()+
geom_polygon(data=china_map1, aes(x=long, y=lat, group=group), fill="grey95", colour="grey60")+
geom_point(data=china_data, aes(x = jd,y = wd, size=zhibiao, fill=zhibiao2, alpha=0.3), shape=21, colour="black")+
scale_size_area(max_size=8)+
scale_fill_gradient2(low="DarkCyan", mid="Azure", high="Sienna", midpoint=median(na.omit
(china_data$zhibiao2)))+
coord_map("polyconic") +ggtitle("Heat&Bubble plot")+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = "none"
)

以上语法中,使用了geom_polygon()多边形函数来定义并填充地图背景 (注意里面的fill参数(指定地图区域颜色),colour参数指定多边形(也就是地区轮廓线)边框颜色),然后通过geom_point()函数添加散点图图层。

图层中指定数据源为合并后的业务数据,散点面积(大小)用zhibiao1来映射,气泡图颜色用zhibiao2来映射(本来散点是只有点颜色(使用colour控制,没有填充色的,可是当给散点指定其形状后,散点就有了面积属性可以使用fill进行颜色填充),气泡的轮廓线用colour来指定)。

之后的scale_size_area()scale_fill_gradient2()是对前面geom_point内的fillsize两个标度进行的深度调整,scale_size_area()告诉软件散点大小与面积要严格的与指标1具体数值大小成比例,并规定面积最大为25。

scale_fill_gradient2()定义了一个三色渐变,lowmidhigh分别由一个颜色代码控制,同时均值颜色要映射给指标2的平均数。

最后的ggtitle定义主题,theme内的参数清除掉所有图层上的无关元素(背景、网格系统、横纵轴标签、刻度线、轴标题、图例)


联系方式:
wechat:ljty1991
Mail:578708965@qq.com
个人公众号:数据小魔方(datamofang)

qq交流群:[魔方学院]298236508

个人简介:
杜雨
财经专业研究僧;
伪数据可视化达人;
文科背景的编程小白;
喜欢研究商务图表与地理信息数据可视化,爱倒腾PowerBI、SAP DashBoard、Tableau、R ggplot2、Think-cell chart等诸如此类的数据可视化软件,创建并运营微信公众号“数据小魔方”。
Mail:578708965@qq.com


备注信息:
知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

坚持原创技术分享,您的支持将鼓励我继续创作!