原创:金小贝 QQ交流:675229288
remapH( )函数主要功能是制作热力效果图,与remapC( )只能根据已经分好的行政区域显示不同热力不一样,remapH( )函数可以实现以任意点为中心,通过颜色渐变、泛化达到热力效果,理论上使用和展现相对更加灵活。但是通过实际使用发现很多不理解的地方,可能是个人理解不到位导致,也希望此包的开发者郎大为Chiffon老师有机会能给予指导、指教。
library(REmap)
?remapH
remapH(data,
maptype = ‘china’,
theme = get_theme(“Dark”),
blurSize = 30,
color = c(‘blue’, ‘cyan’, ‘lime’, ‘yellow’, ‘red’),
minAlpha = 0.05,
opacity = 1,
…)
主要参数说明:
参数一:data为需要的原始数据框格式数据,共3列,经度、纬度、密度,密度值大小将决定热力图颜色深浅
参数二:maptype为地图类型设置,与其他函数一样,可选world、china或者中国省份名称
参数三:theme为主题设置,见之前文章介绍
参数四:bulrSize为从中心到边缘的范围,默认为30
参数五: color为热力图渐变颜色设置
参数六:minAlpha密度值的最小阈值设定,小于这个值的都将以此值对应的热力颜色显示,保证所有项目均有体现
参数七:opacity热力区域透明度,默认为1
掌握好以上参数即可,其他参数比较常规或者之前已经介绍过在此不再赘述。
主要参数说明:
参数一:data为需要的原始数据框格式数据,共3列,经度、纬度、密度,密度值大小将决定热力图颜色深浅
参数二:maptype为地图类型设置,与其他函数一样,可选world、china或者中国省份名称
参数三:theme为主题设置,见之前文章介绍
参数四:bulrSize为从中心到边缘的范围,默认为30
参数五: color为热力图渐变颜色设置
参数六:minAlpha密度值的最小阈值设定,小于这个值的都将以此值对应的热力颜色显示,保证所有项目均有体现
参数七:opacity热力区域透明度,默认为1
掌握好以上参数即可,其他参数比较常规或者之前已经介绍过在此不再赘述。
实例:重庆热力图
#生成重庆经纬度数据
cq <- mapNames(‘chongqing’);cq
baidu_lon <- c()
baidu_lat <- c()
ak <- ‘HuwUWP*******’ #百度地图api的秘钥,需自己申请
library(RCurl)
library(rjson)
for (location in cq) {
url <- paste(‘http://api.map.baidu.com/geocoder/v2/?ak=’,ak,’&callback=renderOption&output=json&address=’,location,sep=”)
url_string <- URLencode(url)
json<- readLines(url_string, warn=F)
geo <- fromJSON(substr(json,regexpr(‘\\(‘,json)+1,nchar(json)-1))
lon<-geo$result$location$lng
lat<-geo$result$location$lat
baidu_lon <- c(baidu_lon,lon)
baidu_lat <- c(baidu_lat,lat)
}
data <- data.frame(address=cq,longitude=baidu_lon,latitude=baidu_lat)
head(data)
head(data)
address longitude latitude
1 酉阳土家族苗族自治县 108.8068 28.90528
2 奉节县 109.3557 30.95855
3 巫溪县 109.3605 31.50916
4 开县 108.3893 31.27710
5 彭水苗族土家族自治县 108.2729 29.35963
6 云阳县 108.8632 31.04241
#随机生成密度数据
prob <- sample(1:100,nrow(data))
prob <- prob/(min(prob)+max(prob))
f_data <- cbind(data[-1],prob)
head(f_data)
longitude latitude prob
1 108.8068 28.90528 0.61224490
2 109.3557 30.95855 0.27551020
3 109.3605 31.50916 0.46938776
4 108.3893 31.27710 0.04081633
5 108.2729 29.35963 0.52040816
6 108.8632 31.04241 0.09183673
#生成最终热力图
remapH(data = f_data,
maptype = ‘重庆’,
theme = get_theme(theme = ‘none’,
backgroundColor = ‘gray’, #整体背景颜色
borderColor = ‘black’, #区域边缘颜色
labelShow = F, #区域名称是否显示
regionColor = ‘gray’, #区域颜色
pointShow = F),
blurSize = 40, #越大范围越大,越虚化
minAlpha = 0.5,
opacity = 3 #不透明度越大越明显
)
结果展示如下:
解读: 有几点发现,一是点多才能有热力效果,记录条数太少显示效果较差。二是初始输入数据的第三列密度值大小对结果展现无影响(使用此函数的初始目的是根据不同点的密度不一样,反映不同的热力密度,但是实际变化数值后展示的结果图没有变化)。三是除了密度数据大小变化无影响外,get_theme( )函数里的参数regionColor设置也失效。此函数的热力图的展示与参数设置关系紧密,blurSize和opacity改变对结果展示影响特别大,需自行调整适应。
至此郎大为Chiffon老师开发的REmap包主要内容都实践完毕,再次向大神致敬以及致谢。
生成重庆经纬度那一段是不是太繁琐了?不是有get_geo_position 函数吗?
一行代码搞定:get_geo_position (cq)
remapH( )函数可以实现以任意点为中心,这句话不对,因为地图只能显示到省级,以某个城市内的多个点为中心好像就不行!
是的,我在后面也有表达,实际使用过程中与理论上不一致,有很多限制。
remapH函数无法绘制市区级别的热力图,有没有其他途径可以实现的?