欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Pyecharts中Map和Geo的使用笔记

发布时间:2024/3/24 编程问答 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Pyecharts中Map和Geo的使用笔记 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • 1. Geo/Map中如何自定义(增加/修改)经纬度坐标?
          • 相关文档:
          • 本地源文件
            • 1. pyecharts 自带的datasets(json)
            • 2. 额外安装的地图文件包
          • ?依赖情况
          • 如果输入了不存在的地点名称会发生什么?
            • Geo中的解决方案:
            • Map中的解决方案:
            • 其他问题
    • 2. Geo/Map中地图上圆点上方数值显示的是经纬度数值,能否显示地图坐标名称和数值?
        • Map
        • Geo
          • 回调函数方法显示标签
      • 更多扩展:#TODO

我使用的Pyecharts 版本:v 0.5.11
官方文档: https://05x-docs.pyecharts.org/#/

1. Geo/Map中如何自定义(增加/修改)经纬度坐标?

相关文档:
  • 自定义地图:https://05x-docs.pyecharts.org/#/zh-cn/customize_map?id=version-057
  • 地理地图数据:https://05x-docs.pyecharts.org/#/zh-cn/datasets?id=提供自定义数据
  • 提供自定义数据:https://github.com/pyecharts/geo-region-coords
本地源文件
1. pyecharts 自带的datasets(json)


数据格式如下:

2. 额外安装的地图文件包

自从 v0.3.2 开始, pyecharts 将不再自带地图 js 文件。如需要用到地图图表,需自行安装对应的地图文件包。

在本地的位置:

例如我的在:C:UsersadminAnaconda3Libsite-packagesecharts_china_cities_pypkg

数据格式如下:

依赖情况

据我的研究,Geo依赖的是 1. pyecharts 自带的datasets(city_coordinates.json);Map依赖的是 2. 额外安装的地图文件包。(如果不对请指正,感谢~)

如果输入了不存在的地点名称会发生什么?
  • 在Geo中:会报错。例如:

    from pyecharts import Geo

    districts=[‘白云区’, ‘从化区’, ‘番禺1111区’, ]
    value = [1, 2, 3,]

    geo = Geo(“Geo地图示例”, “”,title_pos=‘center’, width=1000, height=1000)
    geo.add("",
    districts, value, maptype=‘广州’,
    is_visualmap=True,
    is_label_show=True ,
    visual_range=[min(value), max(value)],
    )
    geo.render()
    geo

  • 地图文件中不存在 “番禺1111区”,程序报错:

    这时候,

    Geo中的解决方案:
  • 可以在源文件中直接修改或添加经纬度坐标位置;

  • Geo中有add_coordinate()方法,例如:

    from pyecharts import Geo

    districts=[‘白云区’, ‘从化区’, ‘番禺区’, ‘海珠区’, ‘花都区’, ‘黄埔区’, ‘荔湾区’, ‘南沙区’, ‘天河区’, ‘越秀区’, ‘增城区’]

    value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]

    geo = Geo(“Geo地图示例”, “”,title_pos=‘center’, width=1000, height=1000)
    geo.add_coordinate(‘南沙区’, 113.525165,22.801624)
    geo.add_coordinate(‘白云区’, 113.273238,23.3)
    geo.add("",
    districts, value, maptype=‘广州’,
    is_visualmap=True,
    is_label_show=True ,
    visual_range=[min(value), max(value)],
    label_formatter=’{b}’
    )
    geo

  • 注意点:

    • 如果 geo.add_coordinate 添加的地点在源文件中已经存在,则自定义添加的会覆盖源文件中的;

    • 注意在 v0.5.11版本中,我估计是不完整或者旧版本的广州地图,没有“白云区”、“南沙区”,增城还是“增城市”而不是“增城区”,所以要手动修改。(Map中也有类似现象)

    • 有些地点在地图上可能过于“拥挤”(例如广州地图的荔湾区,白云区,天河区,海珠区),也可以通过手动修改经纬度坐标来进行调整。(Map中也有类似现象)

    • 记录一下我对广州市11个区的经纬度坐标的调整:

      geo =Geo(“广州市地图”)
      geo.add_coordinate(‘白云区’, 113.273238,23.3)
      geo.add_coordinate(‘越秀区’, 113.266835,23.128537)
      geo.add_coordinate(‘海珠区’, 113.361575,23.08)
      geo.add_coordinate(‘天河区’, 113.361575,23.20)
      geo.add_coordinate(‘番禺区’, 113.384152,22.937556)
      geo.add_coordinate(‘黄埔区’, 113.550541,23.24)
      geo.add_coordinate(‘南沙区’, 113.525165,22.801624)
      geo.add_coordinate(‘花都区’, 113.220463,23.403744)
      geo.add_coordinate(‘从化区’, 113.586679,23.548748)
      geo.add_coordinate(‘增城区’, 113.810627,23.261465)
      geo.add_coordinate(‘荔湾区’, 113.23,23.05)
      geo.add(’’, districts, value, maptype=‘广州’)

  • 在Map中:不会报错,但该地点无法显示,例如:

    from pyecharts import Map

    districts=[‘白云区’, ‘从化区’, ‘番禺11111区’]
    value = [ 1, 2, 3,]

    map = Map(“Map地图示例”, “”, title_pos=‘center’, width=1000, height=1000)
    map.add("",
    districts, value, maptype=‘广州’,
    is_visualmap=True,
    visual_range=[min(value), max(value)],
    is_label_show=True ,
    label_formatter=’{b}’+’{c}’,
    )
    map.render()
    map

  • 输出结果如下,‘番禺11111区’ 没有显示:

    Map中的解决方案:
  • 在源文件中直接修改或添加经纬度坐标位置;
  • 注意点:

    • 我发现了一个奇怪的现象:我在 2. 额外安装的地图文件包 的源文件中对广州市11个区的经纬度坐标进行了调整,在 jupyter notebook 中输出的图没有变化(还是挤在一起),如下:
    • 但是map.render() 出来的html文件里显示的却是调整过后的,如下:
    其他问题


    (来自 https://github.com/pyecharts/pyecharts/issues/164 )

    对于1:我尝试之后发现好像还是可以缩放欸。?
    对于2. Map不能自定义经纬度,没办法,那就只能去源文件里手动修改啦

    2. Geo/Map中地图上圆点上方数值显示的是经纬度数值,能否显示地图坐标名称和数值?

    (https://github.com/pyecharts/pyecharts/issues/817 中有相关的讨论)

    答案是可以的,利用回调函数设置.add()中的label_formatter属性即可。

    回调函数:我自己的理解是,echarts 本身是 javascript,pyecharts 中的回调函数就是将 python 方法翻译为 javascript 方法的函数(如果不对,还请大神指正~)

    Map

    先看Map中的情况:
    运行如下代码,默认显示只显示类目值

    from pyecharts import Mapdistricts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]map = Map("Map地图示例", "",title_pos='center', width=1000, height=1000) map.add("", districts, value,maptype='广州', is_visualmap=True, visual_range=[min(value), max(value)],is_label_show=True , ) map.render() map

    输出结果部分截图如下:

    添加参数label_formatter可以进行设置(中间还可以用“+”连接):

    (来自于文档 基本使用->图标配置->通用配置项->label https://05x-docs.pyecharts.org/#/zh-cn/charts_configure?id=label)

    例如label_formatter='{b}'+'{c}',则类目值和数值可以一起显示了:

    from pyecharts import Mapdistricts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]map = Map("Map地图示例", "",title_pos='center', width=1000, height=1000) map.add("",districts, value,maptype='广州', is_visualmap=True, visual_range=[min(value), max(value)],is_label_show=True , label_formatter='{b}'+'{c}',) map.render() map

    运行结果如下:

    Geo

    再来看Geo中的情况。和Map有所不同,默认的显示的是纬度值

    from pyecharts import Geodistricts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000) geo.add_coordinate('南沙区',113.525165,22.801624) geo.add_coordinate('白云区', 113.273238,23.3) geo.add("", districts, value,maptype='广州', is_visualmap=True, is_label_show=True , visual_range=[min(value), max(value)],#label_formatter='{b}'+'{c}') geo.render() geo


    设置 label_formatter='{b}'+'{c}'之后会把类目值+经度+纬度+数值一起显示出来:

    回调函数方法显示标签

    这时候就要用到回调函数了。操作如下:
    先定义一个geo_formatter函数:

    def geo_formatter(params):return params.name + ' : ' + params.value[2]

    然后再设置label_formatter=geo_formatter即可:

    from pyecharts import Geodef geo_formatter(params):return params.name + ' : '+ params.value[2]districts=['白云区', '从化区', '番禺区', '海珠区', '花都区', '黄埔区', '荔湾区', '南沙区', '天河区', '越秀区', '增城区'] value = [ 1, 2, 3,4, 5,6,7,8,9,10, 11]geo = Geo("Geo地图示例", "",title_pos='center', width=1000, height=1000) geo.add_coordinate('南沙区',113.525165,22.801624) geo.add_coordinate('白云区', 113.273238,23.3) geo.add("", districts, value,maptype='广州', is_visualmap=True, is_label_show=True , visual_range=[min(value), max(value)],#label_formatter='{b}'+'{c}'label_formatter=geo_formatter, # 重点在这里,将函数直接传递为参数。) geo.render() geo

    输出结果如下:

    上述 format 的设置方式同样适用于:xaxis_formatter(x 轴标签格式器),yaxis_formatter (y 轴标签格式器),label_formatter(文本标签格式器) ,tooltip_formatter(提示框标签格式器)

    更多扩展:#TODO

    回调函数只能显示value值,name值等,那能不能显示针对每个城市的自定义的数值呢?(https://github.com/pyecharts/pyecharts/issues/1039)

    (更新中…)

    总结

    以上是生活随笔为你收集整理的Pyecharts中Map和Geo的使用笔记的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。