R语言可视化——REmapH(中心热度图)

今天是REmap系列的最后一篇——REmapH函数。

这个函数的特色是可以做中心辐射的热力图,这种热力图在气象、人口密度、海拔测绘领域有诸多运用,当然也可以上当用在商务场合——特别是跟地理信息有关的数据呈现方面。

加载包:

1
2
library("baidumap")
library("REmap")

语法简介:

1
2
3
4
5
6
7
8
9
?remapH
remapH(data,
maptype = 'china',
theme = get_theme("Dark"),
blurSize = 30,
color = c('blue', 'cyan', 'lime', 'yellow', 'red'),
minAlpha = 0.05,
opacity = 1,
...)
  • data为要传入的数据,数据为三列,第一列为lon(经度),第二列为lat(维度),第三列为prob(密度/概率);
  • maptype为要绘制的地图类型,可选有:”china”,”world”或中国各省份名字;
  • theme为绘制的地图主题类型,可由get_theme函数传入;
  • blurSize为热力效果的泛化范围,可调整热力点中心的扩散程度;
  • color为热力的渐变颜色;
  • minAlpha为热力点的展示阈值,对应data中的prob列,作图时各点密度会对比minAlpha,以凸显不同密度所展示的不同热力分布;
  • opacity为透明度,调整热力图的透明度。
1
2
3
4
5
6
7
8
9
10
get_theme(theme = "Dark",
lineColor = "Random",
backgroundColor = "#1b1b1b",
titleColor = "#fff",
borderColor = "rgba(100,149,237,1)",
regionColor = "#1b1b1b",
labelShow = T,
pointShow = F,
pointColor = "gold"
)

theme为主题,设置该参数后无需设置get_theme里其他参数,可选有”Dark”、”Sky”、”blue”和”none”四种

  • lineColoe为线条颜色,对应为map图里面迁徙线条的颜色
  • backgroundColor为图片的背景色,支持16进制颜色输入,也支持rgb()函数和rgba()
  • titleColor为标题的颜色,设置同上
  • borderColor为地图中各省、市边界颜色
  • regionColor为地图中各区域颜色,各省份和市
  • labelShow为是否展示各省、市名字,设置为True时展示
  • pointShow为是否展示各省会城市所在点,设置为True时展示
  • pointColor设置上述点的颜色

接下来首先通过两个案例进行讲解:

案例1:

1
options(remap.js.web=T)

这里有一个包含经纬度信息及对应密度的数据集,通过该数据集我们可以看到看到REmapH函数制作热力图的大致效果:

1
data<- read.csv(file="D:\\R\\map\\MoveChart\\cityvaluetop10.csv",header=T)

数据结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
head(data)
lon lat prob
1 114.3948 23.40800 0.85
2 115.3948 24.40800 0.85
3 114.3948 23.40800 0.85
4 113.3948 23.40800 0.85
5 114.7307 27.69586 0.80
6 110.5066 28.69586 0.80
'data.frame': 48 obs. of 3 variables:
$ lon : num 114 115 114 113 115 ...
$ lat : num 23.4 24.4 23.4 23.4 27.7 ...
$ prob: num 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 ...

1
2
3
4
5
6
7
8
9
map_out<-remapH(data,
maptype = 'china',
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out)

接下来制作辽宁省省域热力图数据集:

案例2:

首先使用mapNames函数获取辽宁省市级行政单位:

1
2
3
4
city_ln<-mapNames("liaoning")
[1] "大连市" "朝阳市" "丹东市" "铁岭市" "沈阳市" "抚顺市" "葫芦岛市" "阜新市" "锦州市"
[10] "鞍山市" "本溪市" "营口市" "辽阳市" "盘锦市"

获取各市级行政单位经纬度信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
city_list<-get_geo_position(city_ln)
> city_list
lon lat city
1 121.6214 38.91934 大连市
2 120.4573 41.57949 朝阳市
3 124.3626 40.00569 丹东市
4 123.8488 42.29257 铁岭市
5 123.4390 41.81134 沈阳市
6 123.9636 41.88608 抚顺市
7 120.8434 40.71736 葫芦岛市
8 121.6765 42.02798 阜新市
9 121.1336 41.10087 锦州市
10 123.0010 41.11412 鞍山市
11 123.7735 41.29985 本溪市
12 122.2415 40.67256 营口市
13 123.2437 41.27445 辽阳市
14 122.0773 41.12594 盘锦市

生成一列密度数据:

1
2
point<-round(runif(14,min=0.3,max=0.95),2)
[1] 0.89 0.82 0.91 0.87 0.90 0.90 0.85 0.89 0.87 0.94 0.90 0.85 0.88 0.88

合成数据框格式的热力图作图数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
newdata<-data.frame(city_list[,1:2],point)
lon lat point
1 121.6214 38.91934 0.89
2 120.4573 41.57949 0.82
3 124.3626 40.00569 0.91
4 123.8488 42.29257 0.87
5 123.4390 41.81134 0.90
6 123.9636 41.88608 0.90
7 120.8434 40.71736 0.85
8 121.6765 42.02798 0.89
9 121.1336 41.10087 0.87
10 123.0010 41.11412 0.94
11 123.7735 41.29985 0.90
12 122.2415 40.67256 0.85
13 123.2437 41.27445 0.88
14 122.0773 41.12594 0.88

作图函数:

1
2
3
4
5
6
7
8
9
map_out1<-remapH(newdata,
maptype = "辽宁",
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out1)

因为以上数据集中使用的各市中心城市的密度数据,所以整体密度太过分散,看不出渐变效果,当然密度图的数据记录是不受数量限制的,在有较多数据点呈现密集分布的地方,可以看到非常明显的颜色热度渐变效果。

这里我通过添加一列分类数据,将以上密度图数据进行改造:

1
2
3
newdata$perA<-rep("A",14)
newdata$perB<-rep("B",14)
newdata$perC<-rep("C",14)

使用Reshape2包对数据进行一维转化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mydata <- melt(newdata, id.vars=c("lon","lat","point"))
lon lat point variable value
1 121.6214 38.91934 0.85 perA A
2 120.4573 41.57949 0.81 perA A
3 124.3626 40.00569 0.91 perA A
4 123.8488 42.29257 0.90 perA A
5 123.4390 41.81134 0.91 perA A
6 123.9636 41.88608 0.93 perA A
7 120.8434 40.71736 0.91 perA A
8 121.6765 42.02798 0.87 perA A
9 121.1336 41.10087 0.89 perA A
10 123.0010 41.11412 0.82 perA A
11 123.7735 41.29985 0.88 perA A
12 122.2415 40.67256 0.95 perA A
13 123.2437 41.27445 0.90 perA A
14 122.0773 41.12594 0.84 perA A
15 121.6214 38.91934 0.85 perB B
16 120.4573 41.57949 0.81 perB B
17 124.3626 40.00569 0.91 perB B
18 123.8488 42.29257 0.90 perB B
19 123.4390 41.81134 0.91 perB B
20 123.9636 41.88608 0.93 perB B
21 120.8434 40.71736 0.91 perB B
22 121.6765 42.02798 0.87 perB B
23 121.1336 41.10087 0.89 perB B
24 123.0010 41.11412 0.82 perB B
25 123.7735 41.29985 0.88 perB B
26 122.2415 40.67256 0.95 perB B
27 123.2437 41.27445 0.90 perB B
28 122.0773 41.12594 0.84 perB B
29 121.6214 38.91934 0.85 perC C
30 120.4573 41.57949 0.81 perC C
31 124.3626 40.00569 0.91 perC C
32 123.8488 42.29257 0.90 perC C
33 123.4390 41.81134 0.91 perC C
34 123.9636 41.88608 0.93 perC C
35 120.8434 40.71736 0.91 perC C
36 121.6765 42.02798 0.87 perC C
37 121.1336 41.10087 0.89 perC C
38 123.0010 41.11412 0.82 perC C
39 123.7735 41.29985 0.88 perC C
40 122.2415 40.67256 0.95 perC C
41 123.2437 41.27445 0.90 perC C
42 122.0773 41.12594 0.84 perC C

从新运行图表函数:

1
2
3
4
5
6
7
8
9
map_out2<-remapH(newdata[,1:3],
maptype = "辽宁",
theme =get_theme(theme = "Dark"),
blurSize = 70,
color = "red",
minAlpha = 10,
opacity = 1,
)
plot(map_out2)


联系方式:
wechat:ljty1991
Mail:578708965@qq.com
个人公众号:数据小魔方(datamofang)

qq交流群:[魔方学院]298236508

个人简介:
杜雨
财经专业研究僧;
伪数据可视化达人;
文科背景的编程小白;
喜欢研究商务图表与地理信息数据可视化,爱倒腾PowerBI、SAP DashBoard、Tableau、R ggplot2、Think-cell chart等诸如此类的数据可视化软件,创建并运营微信公众号“数据小魔方”。
Mail:578708965@qq.com


备注信息:
知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

坚持原创技术分享,您的支持将鼓励我继续创作!