前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化——ggplot绘制中心密度辐射图

R语言可视化——ggplot绘制中心密度辐射图

作者头像
数据小磨坊
发布2018-04-11 15:43:18
1.8K0
发布2018-04-11 15:43:18
举报
文章被收录于专栏:数据小魔方数据小魔方

今天这篇算是之前ggplot2图表系列的增补。

因为在ggplot2中一直没有看到好的关于密度辐射图(或者称它为热力辐射图,就是那种PowerMap中可以通过颜色色度探查区域指标分布密度的图表类型)的合适解决方案,最近在看github官网上ggmap的介绍帖,看到作者在ggmap函数中嵌套了geom_polygon图层并并使用fill=..level..参数和stat="density_2d"来来制作类似的热度辐射图。

我就突发奇想,如果不是通过ggmap而是通过ggplot函数是否也可以呢,果然也是可以出效果的,先将方法介绍如下:

首先需要加载如下包:

library(ggplot2) library(plyr) library(maptools) library(ggmap)

接下来导入两个数据集:

其中一个是中国省级边界轮廓图,早期关注过数据小魔方的用户大概都知道,我曾经共享过一个名为rstudy的文件包(我在刘万祥老师的公众号里发现的,现在应该也还可以获取),如果手上没有数据可以添加魔方学院的QQ群,在群共享里查找R语言资料。(共享文件比较多,可能需要找一阵子)

另一个是之前在讲解REmap热度辐射图时用过的城市价值指标数据集,推送后会共享在魔方学院的QQ群里。

导入数据集:

china_map<-readShapePoly("c:/rstudy/bou2_4p.shp") #地图数据 china_map1 <- fortify(china_map) #转换为数据框 data<- read.csv(file="D:\\R\\map\\MoveChart\\cityvaluetop10.csv",header=T) #城市指标数据

因为这里使用地图仅仅是作为底图用作定位信息,可以说是陪衬,所以无需对地图和城市指标进行合并。

以下是图表的正式生成过程:

1、画底图:

p<-ggplot()+ geom_polygon(data=china_map1,aes(x=long,y=lat,group=group),fill="#005A32",col="white")

2、添加热度图层

p<-p+geom_polygon(data=data,aes(x=lon,y=lat,fill = ..level..), stat="density_2d", alpha = .3, color = NA)+coord_map("polyconic")

3、调整热度图层

p<-p+scale_fill_gradient2( low = "white",mid="yellow", high = "red")

4、清楚冗余元素

p<-p+theme_nothing()

5、可以给以上热图添加散点辅助观测

p<-p+geom_point(data=data,aes(x=lon,y=lat),col="white")

6、当然,你也可以给三点指定城市的指标数据使其变成气泡图

p<-p+geom_point(data=data,aes(x=lon,y=lat,size=prob),col="white")+scale_size_area(max_size=6)

#记得清除掉第5步,即从第四步开始

至于实际的数据标签,指标名称和区域名称,酌情添加,但是针对地图类图表,数据展示到位即可,不建议添加太多标签,影响美观性。

针对本图表类型,核心参数是第二个geom_polygon()中的fill = ..level..和stat="density_2d"统计变换,使得多边形图转换成为二维水平密度图,但是至今我还没有搞懂里面的算法是什么样的,只能大概模仿出来,至于怎么用,看大家自由发挥了,效果跟真正的热力辐射图还是有些差别,但是勉强能用。

总结下,用到的所有代码如下:

ggplot()+ geom_polygon(data=china_map1,aes(x=long,y=lat,group=group),fill="#005A32",col="white")+ geom_polygon(data=data,aes(x=lon,y=lat,fill = ..level..), stat="density_2d", alpha = .3, color = NA)+ coord_map("polyconic") + geom_point(data=data,aes(x=lon,y=lat,size=prob),col="white")+ scale_size_area(max_size=6)+ scale_fill_gradient2( low = "white",mid="yellow", high = "red")+ theme_nothing() #这一句清空主题的代码是ggmap包中的,必须加载才能用

感兴趣的小伙伴儿可以移步去github官网上搜索ggmap官方介绍,里面使用ggmap调用谷歌地图做的热度图,效果很棒。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档