前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 hchinamap / highcharter 绘制交互式中国地图及中国各省地图

使用 hchinamap / highcharter 绘制交互式中国地图及中国各省地图

作者头像
DataCharm
发布2021-02-22 15:20:47
3.3K0
发布2021-02-22 15:20:47
举报

背景:我在 CRAN 上提交了几个 R 包,都是很简单的绘图包,后来觉得没什么意思便不再维护了。长期以来收到了不少使用者的反馈(issues),都是英语的,也懒得看。。。昨天给他们都回复了下(用中文回复的哈哈哈,让他们自己翻译吧哈哈)

hchinamap:快速绘制中国及各个省的地图

该包绘制的地图精度较低,如果你需要学习绘制高精度的中国地图,欢迎加入我的线上培训班获取:欢迎加入 RStata 线上培训班学习使用 R 语言和 Stata 进行数据处理和可视化

中国省级地图

中国市级地图

你可以从 CRAN 上安装这个包:https://cran.r-project.org/web/packages/hchinamap/

代码语言:javascript
复制
install.packages('hchinamap')

使用起来非常简单,首先加载我提供的示例数据:

代码语言:javascript
复制
dir <- tempdir()
download.file('https://mdniceczx.oss-cn-beijing.aliyuncs.com/chinadf.rda', file.path(dir, 'chinadf.rda'))
load(file.path(dir, 'chinadf.rda'), verbose = TRUE)
chinadf

#> # A tibble: 527 x 3
#>    region name   value
#>    <chr>  <chr>  <dbl>
#>  1 China  北京      44
#>  2 China  天津      28
#>  3 China  河北       3
#>  4 China  山西      65
#>  5 China  内蒙古    18
#>  6 China  辽宁      46
#>  7 China  吉林      67
#>  8 China  黑龙江    80
#>  9 China  上海       8
#> 10 China  江苏      50
#> # … with 517 more rows

绘制中国地图:

代码语言:javascript
复制
library(hchinamap)
china <- chinadf %>% 
  dplyr::filter(region == "China")
hchinamap(name = china$name, value = china$value,
          width = "100%", height = "400px",
          title = "中国地图", region = "China")

还可以绘制各个省级行政单位的:

代码语言:javascript
复制
anhui <- chinadf %>%
  dplyr::filter(region == "Anhui")
hchinamap(name = anhui$name, value = anhui$value,
          width = "100%", height = "500px",
          title = "安徽地图", region = "Anhui")

另外你还可以在 Shiny Apps 里面使用:

代码语言:javascript
复制
dir <- system.file("examples", "hchinamap", package = "hchinamap")
setwd(dir)
shiny::shinyAppDir(".")

使用这个 App 你可以探索各个参数的功能。

关于该包的更多使用方法可以参考:https://cran.r-project.org/web/packages/hchinamap/vignettes/hchinamap.html (原谅我百度翻译的英语文档。。。)

我虽然在 hchinamap 函数里面设置了超过 20 个参数,但是依然不能满足所有人的需要,所以我不再建议大家使用 hchinamap 绘制中国及各个省的地图了。highcharter 可以完成该包提供的所有的功能的!

使用 highcharter 绘制同样的中国及各个省的地图

虽然代码多了点,但是自定义的程度很高!

代码语言:javascript
复制
library(highcharter)
library(jsonlite)
library(tidyverse)
readLines("https://data.jianshukeji.com/jsonp?filename=geochina/china.json", warn = F) %>% 
  str_match(string = ., pattern = "\\((.*)\\)") -> text

load("https://mdniceczx.oss-cn-beijing.aliyuncs.com/chinadf.rda", verbose = TRUE)
china <- chinadf %>%
  dplyr::filter(region == "China") %>% 
  select(-region)

china

fromJSON(text[1, 2], simplifyVector = FALSE) -> cn

highchart(type = "map") %>% 
  hc_add_series_map(map = cn,
                    df = china, 
                    joinBy = "name", 
                    value = "value", 
                    name = "随机数据:",
                    borderWidth = 0.5,
                    borderColor = "gray",
                    states = list(hover = list(color = '#bada55')),
                    dataLabels = list(enabled = FALSE),
                    marginBottom = "200px") %>% 
  hc_title(text = "使用 highcharter 绘制中国地图") %>% 
  hc_subtitle(text = "数据来源:随机数据 | 绘制:<a src='https://tidyfriday.cn'>TidyFriday</a>",
              useHTML = TRUE) %>% 
  hc_tooltip(headerFormat = "",
             pointFormat = "<b>{point.name}</b><br>随机数据:{point.value}",
             borderRadius = 5) %>% 
  hc_colorAxis(dataClasses = JS('
      [{to: 1, color: "#ffffcc", name: "无"}, 
      {from: 1, to: 20, color: "#d9f0a3"}, 
      {from: 20, to: 40, color: "#addd8e"}, 
      {from: 40, to: 60, color: "#78c679"}, 
      {from: 60, to: 80, color: "#31a354"}, 
      {from: 80, color: "#006837"}]')) %>% 
  hc_legend(align = 'left',
            layout = 'vertical',
            valueDecimals = 0,
            floating = TRUE,
            symbolRadius = 0,
            x = 20, y = -20,
            symbolHeight = 14, 
            backgroundColor = JS("(Highcharts.theme && Highcharts.theme.legendBackgroundColor) || 'rgba(255, 255, 255, 0.85)'"),
            title = list(text = "随机数据")) %>% 
  hc_add_theme(hc_theme_google()) %>% 
  hc_exporting(enabled = TRUE) %>% 
  hc_credits(enabled = TRUE) %>% 
  hc_mapNavigation(enabled = TRUE)

绘制省份地图的方法类似,例如绘制广东省的:

代码语言:javascript
复制
chinadf %>%
  dplyr::filter(region == "Guangdong") %>% 
  select(-region) -> gd

gd

readLines("https://data.jianshukeji.com/jsonp?filename=geochina/guangdong.json", warn = F) %>% 
  str_match(string = ., pattern = "\\((.*)\\)") -> text
fromJSON(text[1, 2], simplifyVector = FALSE) -> gdmap

highchart(type = "map") %>% 
  hc_add_series_map(map = gdmap,
                    df = gd, 
                    joinBy = "name", 
                    value = "value", 
                    name = "随机数据:",
                    borderWidth = 0.5,
                    borderColor = "gray",
                    states = list(hover = list(color = '#bada55')),
                    dataLabels = list(enabled = FALSE),
                    marginBottom = "200px") %>% 
  hc_title(text = "使用 highcharter 绘制广东地图") %>% 
  hc_subtitle(text = "数据来源:随机数据 | 绘制:<a src='https://tidyfriday.cn'>TidyFriday</a>",
              useHTML = TRUE) %>% 
  hc_tooltip(headerFormat = "",
             pointFormat = "<b>{point.name}</b><br>随机数据:{point.value}",
             borderRadius = 5) %>% 
  hc_colorAxis(dataClasses = JS('
      [{to: 1, color: "#ffffcc", name: "无"}, 
      {from: 1, to: 20, color: "#d9f0a3"}, 
      {from: 20, to: 40, color: "#addd8e"}, 
      {from: 40, to: 60, color: "#78c679"}, 
      {from: 60, to: 80, color: "#31a354"}, 
      {from: 80, color: "#006837"}]')) %>% 
  hc_legend(align = 'right',
            layout = 'vertical',
            valueDecimals = 0,
            floating = TRUE,
            symbolRadius = 0,
            x = -20, y = -20,
            symbolHeight = 14, 
            backgroundColor = JS("(Highcharts.theme && Highcharts.theme.legendBackgroundColor) || 'rgba(255, 255, 255, 0.85)'"),
            title = list(text = "随机数据")) %>% 
  hc_add_theme(hc_theme_google()) %>% 
  hc_exporting(enabled = TRUE) %>% 
  hc_credits(enabled = TRUE) %>% 
  hc_mapNavigation(enabled = TRUE)

其它省的方法几乎一模一样,唯一不同的就是这个地图数据的链接啦,格式是这样的:https://data.jianshukeji.com/jsonp?filename=geochina/{文件名}

其中中国和各个省的文件名分别为:

  • 中国:china.json
  • 安徽:anhui.json
  • 澳门:aomen.json
  • 北京:beijing.json
  • 福建:fujian.json
  • 甘肃:gansu.json
  • 广东:guangdong.json
  • 广西:guangxi.json
  • 贵州:guizhou.json
  • 海南:hainan.json
  • 河北:hebei.json
  • 河南:henan.json
  • 黑龙江:heilongjiang.json
  • 湖北:hubei.json
  • 湖南:hunan.json
  • 吉林:jilin.json
  • 江苏:jiangsu.json
  • 辽宁:liaoning.json
  • 内蒙古:neimenggu.json
  • 宁夏:ningxia.json
  • 青海:qinghai.json
  • 山东:shandong.json
  • 山西:shanxi.json
  • 陕西:shanxi2.json
  • 上海:shanghai.json
  • 四川:sichuan.json
  • 台湾:taiwan.json
  • 天津:tianjin.json
  • 西藏:xizang.json
  • 香港:xianggang.json
  • 新疆:xinjiang.json
  • 云南:yunnan.json
  • 浙江:zhejiang.json

大家就可以试试自己感兴趣的省份啦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hchinamap:快速绘制中国及各个省的地图
  • 使用 highcharter 绘制同样的中国及各个省的地图
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档