您的位置:首页 > 其它

R开发实例-map分布图

2018-03-27 21:46 169 查看
在网上查找R实战的的时候无意间看到这位大神的R开发实例:绘制分布图。对其十分感兴趣因此按照步骤,从头到尾做了一遍,也算是收获不小。
先附上原博客的链接https://www.cnblogs.com/tgzhu/p/5775829.html#undefined

下面,实战开始!

首先安装包
R命令: install.packages("devtools")
R命令: library(devtools)
R命令: install_github('badbye/baidumap')
R命令: install_github('lchiffon/REmap')

然后从网上下载了全国三甲医院的分布情况:之前博主的文章的链接失效了,我就重新找了一个类似的,经过测试是没问题的
附上链接:http://www.chisc.net/doc/DownSoft/?softid=5876&pathid=0
下载后就是对数据进行清洗,这也是非常重要的工作

首先数据是这样的



只需要医院的名称以及省份即可,因此对需要的部分进行抓取,得到下列的数据并导出到txt文件中,这是在excel中完成的



然后用read.table读取该文件,并转换成dataframehs <- read.table("hospital distribution.txt", header = FALSE, sep = '\t')
hst <- as.data.frame(hs)
colnames(hstcl) <- c("city", "name")效果如下图



接下来写了一个脚本对数据做转换(其实这些用excel很容易完成,但是想锻炼写代码的能力,就...)
dataframetrans <- function(mydf){
rows <- dim(mydf)[1]
city <- NULL
x <- NULL
for (i in 1:rows){
if(mydf[i, 2] == "") {city <- mydf[i,1]
next}
city <- as.character(city)
row <- c(city, as.character(mydf[i, 2]))
x<- rbind(x, row) }
return (x)}
得到结果如下图



然后#这一步是将字符串里的不必要的文字都去掉
hstcl1[,1] <- str_remove_all(hstcl1[,1],"[0-9、()省市自治区维吾尔回族壮族]")

得到结果如下图



至此前期的数据清洗就都完成了。
接下来就是按照大神的代码加载baidumap包,获取医院的经纬度#加载baidumap 根据名称获取医院经纬度
library(baidumap)
bhs <- getCoordinate(hstcl1$name,formatted = T)
#组织清洗后的数据
hsdata <- data.frame(name=hstcl1[, 2],lon=bhs[,1],lat=bhs[,2])
result <- merge(hstcl1,hsdata,by.x="name",by.y="name")
head(result)
#删除空值数据
result <- na.omit(result)
#按城市统计医院数量(分布图用到的参数)
  cityCount <- tapply(pdata$name,pdata$cityName,length)
  citydata <- data.frame(place=row.names(cityCount),values=cityCount)
#geodata
stadata <- data.frame(lon=pdata$lon,lat=pdata$lat,cityname = pdata$name)
#分布图
library(REmap)
output <- remapC(citydata,
title = "Demo",
theme = get_theme("Bright"),
markPointData =stadata[,3],
markPointTheme = markPointControl(symbol = "pin",effect = TRUE,symbolSize = 3,color = "red"),
geoData = stadata)
show(output)
得到如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  R