• R语言
  • 怎样用echarts4r包画中国地图时添加南海九段线?

如题,我尝试了两种方法,效果都很奇怪,请路过的英雄好汉帮忙看看哈。

  1. 把南海九段线当做一个小图贴在原图上
    这里参考了企鹅厂画新冠疫情地图的方法,把南海九段线作为一整个图片贴在原图上,扣下来的图片在这里
    代码如下:

    library(echarts4r)
    library(echarts4r.maps)
    
    df <- data.frame(region = c("湖北", "浙江", "北京", "广东"),
                     value = c(1, 2, 3, 4))
    
    df |>
      e_charts(region) |> #区域
      em_map("China") |>
      e_map(value, map = "China") |>
      e_visual_map(value) |>
      e_image_g(
        right = 20,
        bottom = 20,
        z = -999,
        style = list(
          image = "D:/R/RData/MAP/南海.png",
          width = 150,
          height = 150,
          opacity = .6
        )
      )

    画出来的效果图如下:

    这张图主要问题是:原图底色是灰白的,企鹅厂扣来的图片是有颜色的,而且不大高清,小图的比例和位置需要调整。

  2. 替换echarts4r.map包中的地图json文件
    阿里他们家找到一个地图json文件,下载下来一个名为“中华人民共和国.josn”的文件,将名字改为“China.json”,然后复制粘贴到echarts4r.map包中替换原来的,我的地址是D:\R\R-4.1.1\library\echarts4r.maps
    代码如下:

    library(echarts4r)
    library(echarts4r.maps)
    
    df <- data.frame(region = c("湖北", "浙江", "北京", "广东"),
                     value = c(1, 2, 3, 4))
    
    df |>
      e_charts(region) |> #区域
      em_map("China") |>
      e_map(value, map = "China") |>
      e_visual_map(value) 

    画出来的效果图如下:

    这张图主要的问题是:九段线和南海诸岛倒是画出来了,但是省份填充的颜色又没了。我估计原因是echarts4r.map包原来的json文件格式和我从阿里下下来的json文件格式不一样,虽然两个文件打开看了都是"type": "MultiPolygon"

    鼓捣这件事的时候,在网上找到两个用ggplot2画出来的,一个是豆瓣上的一个是别人博客的,我试了都能复现出来。

    关于json文件,参考豆瓣上那篇文章,也可以直接从我们国家民政部官网下载,如http://xzqh.mca.gov.cn/data/quanguo.jsonhttp://xzqh.mca.gov.cn/data/quanguo_Line.geojson,但是下载下来的json文件是"type": "LineString",我完全不懂MultiPolygonLineString有撒区别,只是猜测这两种类型的地图json文件不能直接互相替换。

    我查看地图json文件是什么类型的方法是,把json文件的内容贴到这个网页里https://www.bejson.com/,单击左下角的“格式化校验”就能看到如

    "geometry": {
    			"type": "LineString",

      yuanfan 关于第二点,只需稍作改动即可

      library(echarts4r)
      library(echarts4r.maps)
      # 数据中的城市名称 和 背景地图中含有的城市名称需要一一对应
      df <- data.frame(region = c("湖北省", "浙江省", "北京市", "广东省"),
                       value = c(1, 2, 3, 4))
      
      df |>
        e_charts(region) |> #区域
        em_map("China") |>
        e_map(value, map = "China") |>
        e_visual_map(value)

      1 个月 后

      yuanfan 空间数据类型,常用的有点、线、多边形,多边形还有你这里的 MultiPolygon。 存储成数据文件的时候,也会有这些类型。这一块可以看 sf 包的介绍,比如有的数据是点状的,一个点(对应一组经纬度)采集一系列观测变量值。