十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
R语言可视化中ggplot绘制中心密度辐射图是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了武陟免费建站欢迎大家使用!
因为在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调用谷歌地图做的热度图,效果很棒。
看完上述内容,你们掌握R语言可视化中ggplot绘制中心密度辐射图是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!