一文排除R语言热力图所有的坑

       今天闲来无事,看到我国的人口屡创新创,准备使用R语言做个分析,把各省的出生率画个热力图出来,结果呢遇到很多雷,再次借CSDN的平台,把这一切记录一下,为各位看官排忧。闲话省说,先上效果图

       首先一点,R语言做热力图想要最炫的效果得使用REmap这个包,不过这个包不是R语言官方CRAN上带的,一般从网上查到的资料都是说要用这种安装方法装

library(devtools)#当然如果你没有装devtools这个包,需要使用install.packages("devtools")命令先去安装包。
install_github('lchiffon/REmap')

不过这个方法装不上REmap,会报这个错误:

Error in read.dcf(path) : 
  Found continuation line starting '    interactive map  ...' at begin of record.

这个错误其实是作者在描述包的文件中多了几个空格造成的。所以遇到这个情况呢,请你去我的资源页中下载一个修复版https://download.csdn.net/download/beyondma/10886472,当然你也可以自己到github上去下载包,然后解压后自行修复description文件也行。在拿到修复包之后通过本地安装即可。具体代码如下:

 devtools::install_local("D://geo_data//REmap-master.zip")#把下载的包的路径写在这里
Installing 3 packages: htmltools, rjson, XML
试开URL’https://cloud.r-project.org/bin/windows/contrib/3.5/htmltools_0.3.6.zip'
Content type 'application/zip' length 661050 bytes (645 KB)
downloaded 645 KB

试开URL’https://cloud.r-project.org/bin/windows/contrib/3.5/rjson_0.2.20.zip'
Content type 'application/zip' length 577829 bytes (564 KB)
downloaded 564 KB

试开URL’https://cloud.r-project.org/bin/windows/contrib/3.5/XML_3.98-1.16.zip'
Content type 'application/zip' length 4600112 bytes (4.4 MB)
downloaded 4.4 MB

package ‘htmltools’ successfully unpacked and MD5 sums checked
package ‘rjson’ successfully unpacked and MD5 sums checked
package ‘XML’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        D:\QQPCmgr\Temp\Rtmp8IVdOE\downloaded_packages
* installing *source* package 'REmap' ...
** R
** data
*** moving datasets to lazyload DB
** demo
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
  converting help for package 'REmap'
    finding HTML links ... 好了
    REmapOutput                             html  
    get_city_coord                          html  
    get_geo_position                        html  
    get_theme                               html  
    knitrREmap                              html  
    mapNames                                html  
    markLineControl                         html  
    markPointControl                        html  
    plot.remap                              html  
    remap                                   html  
    remap.init                              html  
    remapB                                  html  
    remapC                                  html  
    remapH                                  html  
** building package indices
** testing if installed package can be loaded
*** arch - i386
*** arch - x64
* DONE (REmap)
In R CMD INSTALL
> library("REmap")

好的,当成功加载了REmap包之后你就可以去用他做热力图了。

下面这张表读者可以自行考到excel文件中去,这是17年全国人口出生率的数据。

山东17.54
西藏16
新疆15.88
广西15.14
福建15
海南14.73
青海14.42
安徽14.07
贵州13.98
江西13.79
广东13.68
云南13.53
宁夏13.44
湖南13.27
河北13.2
河南12.95
湖北12.6
甘肃12.54
浙江11.92
四川11.26
重庆11.18
陕西11.11
山西11.06
江苏9.71
内蒙古9.47
北京9.06
上海8.1
天津7.65
吉林6.76
辽宁6.49
黑龙江6.22

生成热力图具体代码如下:

orgdata=read_excel("D://birth1.xls",col_names=F)
orgdata=data.frame(province=orgdata[[1]],birthrate=orgdata[[2]])

mydata=data.frame(get_geo_position(as.character(orgdata[[1]])),orgdata[[2]])
mydata=mydata[,-3]
names(mydata) <- c("lon","lat","cityvalue")
remapH(mydata, maptype = 'china', theme = get_theme("Dark"), blurSize = 30, color = 'red', minAlpha = 0.5, opacity = 1)

但是你看到这样的效果不好,原因很简单,以西藏为例,西藏的出生率排名第二,却比较暗淡,这是因为我们的mapdata中只有西藏首俯拉萨一个点的数据,这画出来自然没有效果。至少要把一个省的所有城市都标上相同的效果出来才好,改进如下:

 

orgdata=read_excel("D://birth1.xls",col_names=F)#需要填写你excel文的路径
orgdata=data.frame(province=orgdata[[1]],birthrate=orgdata[[2]])#重新定义列名mydata=data.frame(get_geo_position(as.character(orgdata[[1]])),orgdata[[2]])#通过get_geo_position函数得到每个省的坐标
mydata=mydata[,-3]#把第三列也就是省份名称去掉,绘图时不需要此列
names(mydata) <- c("lon","lat","cityvalue")#改列名,后面否则无法添加行

provnames=as.character(orgdata[[1]])#将省份名称取出来
for (j in 1:length()){
citynames=mapNames(provnames[j])#从省份中将城市名称取出来,否则将画出来的热力图效果太差
citypos=get_geo_position(citynames)#将同省内的城市标为和省同样的数据
 cityvalue=rep(c(orgdata[j,2]),length(citynames))#将同省内的城市标为和省同样的数据
orgcity=data.frame(citypos,cityvalue)#将同省内的城市标为和省同样的数据
orgcity=orgcity[,-3]#将同省内的城市标为和省同样的数据
mydata=rbind(mydata,orgcity)#将同省内的城市标为和省同样的数据
}
remapH(mydata, maptype = 'china', theme = get_theme("Dark"), blurSize = 30, color = 'red', minAlpha = 0.5, opacity = 1)#绘图

 

效果是这样的

这样是不是就准确多了。

当然也可以直接用REmapC做一个没那么纯一点的热力图代码如下

outdata = remapC(orgdata,maptype = "china",color = 'red',mindata=6,maxdata=17.8)
plot(outdata)

文中开头的效果图其实是最简单的代码如下:

map_out1<- remap(mapdata=map_data)

好了,到这里所有坑全排了,祝大家新年快乐!

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值