使用 hchinamap 包进行地图描点!

使用 hchinamap 包进行地图描点!

在此之前,我的 hchinamap 包只能用来绘制填充地图,此次的更新添加了地图描点的功能。目前我还没完全准备好发布此次的更新,感觉仍然很乱。

原来的 hchinamap() 函数把绘制中国地图和省份地图的功能集合在了一起,这产生的一个问题就是,尽管我只想绘制中国地图,绘制结果的源代码里面还是会包含省份地图的数据,这就导致图像渲染很慢,另外如果你在 RMarkdown 文档使用就会使得编译产生的 html 文件非常大。所以我在编写新的地图描点函数的时候考虑到了这个问题,如果我给每个省份编写一个单独的函数,就会非常麻烦,所以我选择了一个折衷的方案,就是我写了个单独的绘制中国地图的函数,然后有写了一个可以绘制各个省份地图的函数。所以这次的更新添加了两个新的函数,chinamappoint() 和 provincepoint()。非常好用,但是有一个现在还没解决的问题就是这两个函数可以在 RMarkdown 里面使用但是不能在 Shiny 中使用,我想这可能是因为我包内的 js 代码不规范导致的。

我为这两个函数新制作了一个示例数据集,是中国城市的分布,数据整理自Highcharts | Map data center,原始数据源是人民日报。为了进行地图描点,你需要四个向量,category、name、latitude、 longitude:

R
1
2
3
4
5
6
7
8
9
10
11
12
13
library(hchinamap)
library(dplyr)
library(magrittr)
dir <- tempdir()
download.file('https://czxb.github.io/br/chinamappointdf.rda', file.path(dir, 'chinamappointdf.rda'))
load(file.path(dir, 'chinamappointdf.rda'), verbose = TRUE)
df <- chinamappointdf
chinamappoint(
cat = df$cat, name = df$name,
lat = df$lat, lon = df$lon,
title = "Urban distribution in China",
subtitle = "Data source: People's daily",
width = "100%", height = "500px")

绘制省份地图则可以:

R
1
2
3
4
5
6
7
df <- chinamappointdf %>% dplyr::filter(province == "Shandong")
provincepoint(cat = df$cat, name = df$name,
lat = df$lat, lon = df$lon, region = "shandong",
title = "Urban distribution in Shandong Province",
subtitle = "Data source: People's daily",
width = "100%", height = "500px",
markerRadius = 8)

此外,我还给 hchinamap() 函数添加了三个参数,mapNavigation、mapNavigationVerticalAlign、mapNavigationAlign,用以调整控制地图放大缩小的按钮。例如下面的完整示例就可以让这个按钮隐藏:

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
dir <- tempdir()
download.file('https://czxb.github.io/br/chinadf.rda', file.path(dir, 'chinadf.rda'))
load(file.path(dir, 'chinadf.rda'), verbose = TRUE)
sx <- chinadf %>%
dplyr::filter(region == "Shaanxi")
hchinamap(name = sx$name, value = sx$value,
width = "100%", height = "400px",
region = "Shaanxi",
itermName = "Random data",
title = "Map of Shaanxi",
titleAlign = "center",
titleSize = "20px",
titleColor = "#333333",
subtitle = "czxa.top",
subtitleAlign = 'center',
subtitleSize = "16px",
subtitleColor = "#666666",
min = 0,
minColor = "rgb(255,255,255)",
maxColor = "#006cee",
legendLayout = "horizontal",
legendAlign = "center",
legendTitle = "Random Data",
legendVerticalAlign = "bottom",
hoverColor = '#a4edba',
mapNavigation = 0,
mapNavigationVerticalAlign = "bottom",
mapNavigationAlign = "left",
theme = "sunset")

# R

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×