使用 hchinamap / highcharter 繪製交互式中國地圖及中國各省地圖

2021-03-02 RStata

這裡提供兩種方法,方法一是通過 hchinamap 包,這個包的使用比較簡單,但是自定義程度比較低,另外一個是使用 highcharter 包,代碼雖然複雜了點,但是自定義程度很高。

hchinamap:快速繪製中國及各個省的地圖

該包繪製的地圖精度較低,如果你需要學習繪製高精度的中國地圖,歡迎加入我的線上培訓班獲取:歡迎加入 RStata 線上培訓班學習使用 R 語言和 Stata 進行數據處理和可視化

中國省級地圖中國市級地圖

你可以從 CRAN 上安裝這個包:https://cran.r-project.org/web/packages/hchinamap/

install.packages('hchinamap')

使用起來非常簡單,首先加載我提供的示例數據:

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

繪製中國地圖:

library(hchinamap)
china <- chinadf %>% 
  dplyr::filter(region == "China")
hchinamap(name = china$name, value = china$value,
          width = "100%", height = "400px",
          title = "中國地圖", region = "China")

還可以繪製各個省級行政單位的:

anhui <- chinadf %>%
  dplyr::filter(region == "Anhui")
hchinamap(name = anhui$name, value = anhui$value,
          width = "100%", height = "500px",
          title = "安徽地圖", region = "Anhui")

另外你還可以在 Shiny Apps 裡面使用:

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 繪製同樣的中國及各個省的地圖

雖然代碼多了點,但是自定義的程度很高!

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)

繪製省份地圖的方法類似,例如繪製廣東省的:

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/{文件名}

其中中國和各個省的文件名分別為:

大家就可以試試自己感興趣的省份啦!

相關焦點

  • 使用Python和R繪製數據地圖的十七個經典案例
    這裡,還有一些更好的資源用於使用地圖、mapsdata和ggplot2: 在R中繪製地圖 http://eriqande.github.io/rep-res-web/lectures/making-maps-with-R.html 使用ggplot2軟體包在R中繪製地圖 http://zevross.com/blog/2014/
  • 使用REmap繪製中國地圖
    上次我們介紹了使用ggplot2繪製中國熱力地圖,需要溫習的同學可以點擊以下連結 使用ggplot2繪製中國地圖  。
  • 手把手教你使用ggplot2繪製中國地圖
    自從用了ggplot2包,越來越覺得其博大精深,通過圖層的概念可以繪製豐富的可視化圖形,如常見的散點圖、直方圖、條形圖、折線圖等。今天就教大家如何使用ggplot2實現地圖的繪製,以及如何在地圖中加入氣泡圖和條形圖。本文所使用的數據來自於經管之家moonstone作者提供的流行病學樣本數據。有關地理信息數據可至文後的下載連結。
  • 【Python】用pyecharts繪製我國人口分布和遷移地圖
    安裝pyecharts庫Geo和Map模塊主要函數用Geo模塊繪製人口分布圖3.1  導入我國各省人口數據3.2  在地圖上展示各省人口數據漣漪圖3.3  在地圖上展示各省人口數據熱力圖用Map模塊繪製人口分布圖全國各省人口流入廣東動態軌跡圖5.1 導入我國各省人口遷移數據
  • 用R語言繪製動態地圖
    案例library(baidumap)library(ggmap)# 獲取北京大學的地圖信息q <- getBaiduMap('北京大學', width=600, height=600, zoom=18, scale = 2, messaging=FALSE)ggmap(q) #繪製地圖getCoordinate
  • R筆記7:ggplot繪製商務圖表--地圖上的迷你柱形圖
    要繪製這種地圖上的小柱形圖,據說可以使用ggsubplot包,不過這裡還是使用原來案例裡的思路來繪製,也很簡單,就是一層一層地去繪製。作圖思路:先根據地圖文件繪製地圖底圖,再根據各省坐標,一次左右偏移一點,一次右偏移一點,分別繪製兩組誤差線作為柱形圖,誤差線的長度根據兩年指標按比例折算。最後標註省名和百分比數據標籤。
  • Python爬取中國各省疫情確診人員數據生成可視化中國地圖界面
    大家好,接下來我們用python爬蟲技術爬取中國各省疫情確診人員數據,得到數據後自動生成中國地圖可視化界面。然後通過正則來取我們需要的數據,即中國各省確診人數和省的名稱。最後通過pyecharts可視化地圖來展示我們的數據。接下來具體操作吧。
  • R-ggplot2 標準中國地圖製作
    由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):
  • R可視乎|標準中國地圖製作
    由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):其實我很早就想試著用R進行此類圖表的繪製了
  • 數據分享|使用 Stata 繪製中國省級行政區劃地圖(帶九段線和比例尺)
    繪製填充地圖為了讓大家更好的在實際工作中使用這份數據,我使用的是疫情數據演示這份地圖數據的使用:cd "~/Desktop/Stata/// clmethod(custom) clbreaks(0 1 2 3 4) /// ti(Stata 繪製帶九段線小地圖的中國省級地圖, size(*1.1) color(black)) /// graphr(margin(medium)) /// subti("2019 年中國省級行政區劃", color(black)) /// caption("版本
  • R軟體繪製中國地圖程序以及必備底圖資料
    #1---關於中國底圖繪製# map_china=read.table("Rmap/china_map.txt",header=F)# plot(map_china,col='black',type='l',lty=1,lwd=1.5,xlim=c(75,134),ylim=c(
  • 如何使用R、ArcMap 和 Tableau繪製二元分級統計地圖?
    分級統計地圖(choropleth map)是一種在地圖分區上使用視覺符號(通常是顏色、陰影或者不同疏密的暈線)來表示一個範圍值的分布情況的地圖
  • 【科研貓·繪圖】世界地圖繪製
    這些圖頻繁出現在Lancet或者NEJM、CNS等頂級雜誌中,不過對於很多科研人員來說,地圖的繪製由於沒有現成軟體可以直接操作,一直以來都是一大難題。前面一期的教程中,我們給大家講解了中國地圖的繪製方法【科研貓·繪圖】中國地圖繪製:R語言版,在我們發布這篇教程後,馬上有同學反映想要學習世界地圖的繪製,作為實力寵粉的科研貓團隊,粉絲的要求豈能不去滿足。
  • 實用技術 | 如何用R繪製並填充相對正確的世界地圖
    ggplot() + geom_sf(data = worlddata, aes(fill = estimate), colour = "#525252",size=0.3)+ #繪製世界地圖並按照estimate欄位中的數據上色 geom_sf(data = SCSislands, colour = "#525252")+ #繪製南海諸島
  • 中國人在繪製超級大地圖(中英雙語)
    作為一名研究全球治理的學者,難免常常感嘆,當時中國在清代康熙年間,仍在用山川河流工筆畫勾勒疆域,不精確,更限制了決策者的戰略視野。19世紀的衰敗給了中國人慘痛的歷史教訓。學術界通常從政治、經濟、社會、文化等諸多宏大視角,思考近代化以來中華帝國的崩潰原因,卻往往忽視了地圖繪製的這個細節。幸運的是,當代中國人已杜絕了歷史重演。
  • 用R在地圖上繪製網絡圖的三種方法
    需要將這些節點放置在地圖上,然後繪製他們之間的連結。>mapcoords <- coord_fixed(xlim=c(-150,180), ylim=c(-55,80))方法一:ggplot2除了需要世界地圖(country_shape)中國家邊界外,我們還需要三個幾何對象:geom_point:繪製節點;geom_text:添加節點的標籤名字;geom_curve:繪製節點間的連線(
  • 手把手|如何用Python繪製JS地圖?
    用Python處理數據,然後用Folium將它在Leaflet地圖上進行可視化。 概念 Folium能夠將通過Python處理後的數據輕鬆地在交互式的Leaflet地圖上進行可視化展示。它不單單可以在地圖上展示數據的分布圖,還可以使用Vincent/Vega在地圖上加以標記。
  • 中國將繪製新版《中國癌症地圖集》
    原標題: 中國將繪製新版《中國癌症地圖集》  東方網9月15日消息:記者15日從科技部獲悉,2014年由科技基礎性工作專項部署的「《中國癌症地圖集》編制」項目已經啟動,將繪製、出版以縣(區)為單位的新版癌症地圖集,建立區域性癌症流行情況大型元資料庫和共享資料庫。
  • R語言可以這麼玩 | 繪製地圖與地點數據可視化
    這次,我們用R來畫地圖吧,利用可視化工具,我們更能輕鬆地得出結論哦~R語言裡的ggmap包是繪製地圖的利器。在確保電腦可以上外網的情況下(為了保證進入google地圖的URL),ggmap包幫助我們輕鬆下載google map,再加上和ggplot2製圖包的疊加,可以輕鬆、方便地繪製可視化地圖。
  • 基礎英語口語67|Atlas, Map, Globe 地圖冊、地圖、地球儀
    Do you know the difference between an atlas, a map and a globe? 你知道地圖冊、地圖和地球儀之間的區別嗎?2. A map usually is a plan of an area or region or town. 地圖通常是一個地區或城鎮的平面圖。3.