Pyecharts 中Geo函数常用参数的用法说明


Posted in Python onFebruary 01, 2021

一、Pyeharts简介

pyecharts 是一个用于生成 Echarts 图表的类库。用 Echarts 生成的图可视化效果很不错,pyecharts库是用来与 Python 进行对接,方便在 Python 中直接使用数据生成图。

最新的Pyecharts库版本是v1,且与老版本 v0.5.X 是不兼容的,v0.5.X版本也已不再维护。新旧版本的Geo有着较大改动,本篇均是基于旧版本0.5.11

二、Pyecharts安装

pyecharts的安装说明很简单,也有很多大佬写了过程,本篇不赘述,主要说一下指定版本的问题。

安装pyecharts

Pyecharts v1版本的安装可使用pip install pyecharts -U

Pyecharts v0.5.X版本的安装可使用pip install pyecharts==0.5.11

安装对应的地图拓展

pip install echarts-countries-pypkg 
pip install echarts-china-provinces-pypkg 
pip install echarts-china-cities-pypkg 
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg

全球国家地图:echarts-countries-pypkg (1.9MB)

中国省级地图:echarts-china-provinces-pypkg (730KB)

中国市级地图:echarts-china-cities-pypkg (3.8MB)

中国区县地图:echarts-china-counties-pypkg

中国大区地图:echarts-china-misc-pypkg(如:华南、华北等)

三、Geo常用参数说明

1、创建Geo:geo=Geo()

geo=Geo()是画出地图的背景。

Geo(title,subtitle,width,height,title_pos,title_top,title_color,subtitle_color,title_text_size,subtitle_text_size,background_color,page_title,renderer,is_animation)

各参数说明如下。

实际使用过程中,我们其实经常用到的就几个参数,如title,width,height,background_color,只要搞这几个基本就够用了,所有参数都有默认值,这意味着在最极端情况下,直接用Geo()也可以,不过画出来的就是一张白纸罢了。

Init docstring:
  :param title:
   主标题文本,支持换行,默认为 ""
  :param subtitle:
   副标题文本,支持换行,默认为 ""
  :param width:
   画布宽度,默认为 800(px)
  :param height:
   画布高度,默认为 400(px)
  :param title_pos:
   标题距离左侧距离,默认为'left',有'auto', 'left', 'right',
   'center'可选,也可为百分比或整数
  :param title_top:
   标题距离顶部距离,默认为'top',有'top', 'middle', 'bottom'可选,
   也可为百分比或整数
  :param title_color:
   主标题文本颜色,默认为 '#000'
  :param subtitle_color:
   副标题文本颜色,默认为 '#aaa'
  :param title_text_size:
   主标题文本字体大小,默认为 18
  :param subtitle_text_size:
   副标题文本字体大小,默认为 12
  :param background_color:
   画布背景颜色,默认为 '#fff'
  :param page_title:
   指定生成的 html 文件中 <title> 标签的值。默认为 'Echarts'
  :param renderer:
   指定使用渲染方式,有 'svg' 和 'canvas' 可选,默认为 'canvas'。
   3D 图仅能使用 'canvas'。
  :param extra_html_text_label:
   额外的 HTML 文本标签,(<p> 标签)。类型为 list,list[0] 为文本内容,
   list[1] 为字体风格样式(选填)。如 ["this is a p label", "color:red"]
  :param is_animation:
   是否开启动画,默认为 True。V0.5.9+

举例子:

from pyecharts import Geo
 
geo =Geo("Geo地图示例", "副标题",width=500, height=500, title_pos='center',title_top=20, title_color="#2E2E2E",
   subtitle_color='#aaa',title_text_size=16,subtitle_text_size=12,background_color='#EEEEE8',
   page_title='Echarts',renderer='canvas',is_animation=True)
 
geo

Pyecharts 中Geo函数常用参数的用法说明

2、geo.add_coordinate()新增坐标点

geo.add_coordinate()的作用就是新增,比如现在调用一张广州地图,现在要在显示一个特定的点“测试1”,像这样的点就必须用add_coordinate新增进去,否则会报错(ValueError: No coordinate is specified for 测试1)。

geo.add_coordinate(点名称,经度,纬度),3个参数都是必填项

geo.add_coordinate('测试点1',113.40,23.07)

3、geo.add()展示坐标点

geo.add()的作用就是将点展示到上面加载的地图上,add有一大堆的参数,最常用的是series_name、names、value、type、maptype、is_visualmap、visual_range、visual_text_color、symbol_size,其中series_name、names、value、maptype这四个是必填项

# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
 series_name: str,
 
 # 数据项 (坐标点名称)
 names:list
 
 # 数据项 (坐标点值)
 value: list
 
 # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种
 type: 默认"scatter",
 
 # 是否选中图例
 is_selected: 默认True,
 
 # 标记图形形状,circle,pin,rect,diamon,roundRect,arrow,triangle
 symbol: 默认circle,
 
 # 标记的大小
 symbol_size: 默认12,
 
 # 系列 label 颜色
 color: 默认None,
 
 # 是否是多段线,在画 lines 图情况下
 is_polyline: 默认 False,
 
 # 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
 is_large: 默认 False,
 
 # 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。
 trail_length:默认 0.2
 
 # 地图选择,如广东、广州、china
 maptype
 
 #不知道什么作用,只知道默认Ture
 is_random
 
 #是否开启鼠标缩放和平移漫游。'scale'缩放、'move'平移、'True'都开启
 is_roam:默认True
 
 #显示图例条
 is_visualmap:默认True
 
 #图例条范围
 visual_range
 
 #图例条颜色
 visual_text_color
 
 #常态下地图的颜色
 geo_normal_color
 
 #触发下地图的颜色(鼠标放在地图上)
 geo_emphasis_color
 
 #涟漪的多少,当type="effectScatter"时才有效
 effect_scale
 
 #显示标签
 is_label_show
 
 #标签颜色
 label_text_color
 
 #标签位置(inside,top,bottom,left,right)
 label_pos:默认"inside"
 
 #边界颜色
 border_color

举例子

from pyecharts import Geo
 
districts=['荔湾区', '花都区', '番禺区','测试点1']
value = [ 200, 200,300,400]
 
geo =Geo("Geo地图示例", "副标题",width=500, height=500, title_pos='center',title_top=20, title_color="#2E2E2E",
   subtitle_color='#aaa',title_text_size=16,subtitle_text_size=12,background_color='#EEEEE8',
   page_title='Echarts',renderer='canvas',is_animation=True)
 
geo.add_coordinate('测试点1',113.40,23.07)
geo.add("系列名1", 
  districts, value,type="effectScatter",is_selected=True,symbol='circle',symbol_size=20,color=None,
  maptype='广州',is_roam=True,is_visualmap=True, visual_range=[0,500],visual_text_color="#2E2E2E",
  geo_normal_color="#323c48",geo_emphasis_color='#2a033d', effect_scale=3,
  is_label_show=True,label_text_color="#00FF00",label_pos="inside"
  )
 
geo.render("广州测试2.html")
geo

Pyecharts 中Geo函数常用参数的用法说明

在这里有2个问题还没解决。第一、不知道is_random参数的作用,感觉不管是True或False都没影响;第二、如上图的series_name “系列名1”,不知道如何改变它的位置,如移动到左边右边等。

4、geo.render()保存文件

geo.render()很简单了,就是将地图保存为文件出来,render只有一个参数,就是path路径

geo.render("广州测试2.html")

补充:Pyecharts v1 Geo库的一些更新与应用

最近在利用Python进行爬虫的过程中,需要对网页中爬取的数据做一些可视化的处理,其中有部分数据是关于地区分布的,在地图上标注出具体的参数分布将使得数据更加的直观与生动。

地图标注的工具我选择使用的是Pyecharts库中Geo,运行在Pycharm下,值得注意的是,最新的Pyecharts库版本是v1, 是最新的版本,且与老版本 v0.5.X 是不兼容的,v0.5.X版本也已不再维护,所以建议以后尽量应用最新的v1版,本文也将在此对其进行一些Geo库的更新应用的说明。

Pyecharts v1版本的安装可使用pip install pyecharts -U,也可直接在Pycharm中安装Pyecharts,其说明文档地址为https://pyecharts.org/#/zh-cn/intro

Pyecharts v0.5.X版本的安装可使用pip install pyecharts==0.5.11,其说明文档地址为https://05x-docs.pyecharts.org/#/zh-cn/prepare

新版本Pyecharts中的地理图表Geo有着较大的改动,总的一个最直观的更新感受是,新的库没有以前那么繁琐了,应用起来更简单直接。因为本人刚接触Python,很多东西也是刚刚入门,现阶段也只是达到能够初步使用Geo的程度,在探索使用新版本的过程中发现网上关于新板Pyecharts的说明很少,所以在这里将自己遇到的一些问题以及自己的一些见解整理出来,以下的一些说明与理解可能较为粗浅,万望各位读者见谅。

Geo:地理坐标系

Geo作为一个地理坐标标注的工具,在功能上新老版本基本是一致的,但在细节上却有着很大的差别,这也导致了新旧代码是完全不通用的。

1. 创建Geo:geo = Geo()

在v0.5.X版本中在创建geo的过程中是可以对其进行一些基本参数设定的

如以说明文档中的例子:

geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color="#404a59", )

可以设定主标题,副标题,标题颜色为止,图表大小,背景颜色等。

但在新版本中继续按照这样的格式进行创建时,编译器报错AttributeError: 'str' object has no attribute 'get',没有这样的对象。在新版文档中对Geo是直接进行创建的geo = Geo(),其实这样创建基本也就可以了,但是如果你真的想对其进行更多的参数设置,当然也是可以的。

在新的库中,对Geo的操作统一放在init_opts中,对其进行更改需要统一的对类opts.InitOpts进行修改,这里我们就需要引入from pyecharts import options as opts才能进行调用。

具体的InitOpts包括以下一些参数

class InitOpts(BasicOpts):
 def __init__(
  self,
  width: str = "900px",
  height: str = "500px",
  chart_id: Optional[str] = None,
  renderer: str = RenderType.CANVAS,
  page_title: str = CurrentConfig.PAGE_TITLE,
  theme: str = ThemeType.WHITE,
  bg_color: Union[str, dict] = None,
  js_host: str = "",
  animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
 ):
  self.opts: dict = {
   "width": width,
   "height": height,
   "chart_id": chart_id,
   "renderer": renderer,
   "page_title": page_title,
   "theme": theme,
   "bg_color": bg_color,
   "js_host": js_host,
   "animationOpts": animation_opts,
  }

需要注意的是对opt.InitOpts直接进行配置的话,只能对部分参数进行更改,如bg_color等,而width,height等参数是固定的无法修改的,比如如果这样设定

geo = Geo(init_opts = opts.InitOpts("aaa", width = 400, height = 200, bg_color = "#404a59"))

将报TypeError: init() got multiple values for argument 'width'多赋值的错误。好在新版本除了提供Opts 配置项作为参数传入,还提供了原生 dict 作为参数配置,所有参数均可以自己任意定义,具体操作代码是

geo = Geo(init_opts = {"width":1600,"chart_id":"ceshi","bg_color":"#404a59"})

这里发现了一个奇怪的现象,当更改height参数时,将直接导致地图标注无图像,至今未明白其中的原因。

2.add_schema设置

add_schema是Geo下的一个函数,具体功能是对地图的参数与功能进行一些配置,主要包括有

def add_schema(
 # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
 maptype: str = "china",
 
 # 是否开启鼠标缩放和平移漫游。
 is_roam: bool = True,
 
 # 当前视角的缩放比例。默认为 1
 zoom: Optional[Numeric] = None,
 
 # 当前视角的中心点,用经纬度表示。例如:center: [115.97, 29.71]
 center: Optional[Sequence] = None,
 
 # # 标签配置项,参考 `series_options.LabelOpts`
 label_opts: Union[opts.LabelOpts, dict, None] = None,
 
 # 地图区域的多边形 图形样式。
 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] =None,
 
 # 高亮状态下的多边形样式
 emphasis_itemstyle_opts: Union[opts.ItemStyleOpts, dict,None] = None,
 
 # 高亮状态下的标签样式。
 emphasis_label_opts: Union[opts.LabelOpts, dict, None] =None,
):

这里我只使用过maptype,zoom,label_opts的设置,具体设置如下

geo.add_schema(maptype = "china", zoom = 1, label_opts = opts.LabelOpts(is_show=True))

maptype可替换成世界地图,省份地图等,地图资源可通过以下

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg

zoom是缩放设置,label_opts是标签设置,如同1中的设置,这里也是可以通过原生dict进行自定义设置的。

3.add_coordinate设置:新增坐标点

Geo中可以自己增加需要标注的坐标点,通过设置地点,经度,纬度这三个参数即可完成添加。

def add_coordinate(
 # 坐标地点名称
 name: str,
 # 经度
 longitude: Numeric,
 # 纬度
 latitude: Numeric,
)

这个函数和旧版是一致的,应用也非常简单,此处不再多加赘述,举一个简单的例子

geo.add_coordinate("标注地点", 120, 80)

4.add设置:显示与图例筛选

这是Geo中最主要的函数模块,可供设置的参数类型也比较多,新版的add函数结构与以前相比也有较大的改动,相关的参数如下所示

def add(
 # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
 series_name: str,
 
 # 数据项 (坐标点名称,坐标点值)
 data_pair: Sequence,
 
 # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
 # from pyecharts.globals import GeoType
 # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
 type_: str = "scatter",
 
 # 是否选中图例
 is_selected: bool = True,
 
 # 标记图形形状
 symbol: Optional[str] = None,
 
 # 标记的大小
 symbol_size: Numeric = 12,
 
 # 系列 label 颜色
 color: Optional[str] = None,
 
 # 是否是多段线,在画 lines 图情况下
 is_polyline: bool = False,
 
 # 是否启用大规模线图的优化,在数据图形特别多的时候(>=5k)可以开启
 is_large: bool = False,
 
 # 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。默认值 0.2
 trail_length: Numeric = 0.2,
 
 # 开启绘制优化的阈值。
 large_threshold: Numeric = 2000,
 
 # 标签配置项,参考 `series_options.LabelOpts`
 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
 
 # 涟漪特效配置项,参考 `series_options.EffectOpts`
 effect_opts: Union[opts.EffectOpts, dict] = opts.EffectOpts(),
 
 # 线样式配置项,参考 `series_options.LineStyleOpts`
 linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
 
 # 提示框组件配置项,参考 `series_options.TooltipOpts`
 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
 
 # 图元样式配置项,参考 `series_options.ItemStyleOpts`
 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

其中,新旧版本最大的一个不同是,旧版的地点和值分开配置给attr和value,旧版的典型示例如下

from pyecharts import Geo
 
data = [
 ("海门", 9), ("鄂尔多斯", 12), ("招远", 12), ("舟山", 12), ("齐齐哈尔", 14), ("盐城", 15)
]
geo = Geo(
 "全国主要城市空气质量",
 "data from pm2.5",
 title_color="#fff",
 title_pos="center",
 width=1200,
 height=600,
 background_color="#404a59",
)
attr, value = geo.cast(data)
geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5)
geo.render()

而新版的add函数将地点和值放在了一个数据项里,

geo.add("", [attr, value], type_=ChartType.HEATMAP, symbol_size = 12, label_opts = opts.LabelOpts(is_show=False))

其他一些参数配置大致与以前是一致的,配置方式也可同样参照1中的方式进行。

在运行中发现一个有趣的问题,如一个个对坐标进行显示插入

geo.add_coordinate("测试点1", 20, 40)
geo.add("haha1", [("测试点1", 60)])
geo.add_coordinate("测试点2", 60, 80)
geo.add("haha2", [("测试点2", 60)])

这样运行是没有问题的,但如果对列表中的项进行批量的插入,如

for i in range(num):
 geo.add_coordinate(address[i], lng[i], lat[i])
 geo.add("", [(address[i],60)])

这样做是会报错的,具体原因不是太明白,无奈只能进行如下修改

for i in range(num):
 geo.add_coordinate(address[i], lng[i], lat[i])
geo.add("", [(address[i],60) for i in range(num)])

做了这样的修改后就没有问题了,如果有知道原因的朋友可以留言给我,万分感谢

还有一个值得注意的问题是,对中国地图进行标注时,使用的地点不能包含“省”,“市”等,只能使用“江苏”,“浙江”等地名,不然就是无效的。

最后想放一张自己运行生成的标注地图,无奈第一次标记这边的文章,不会添加图片!!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python编码类型转换方法详解
Jul 01 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
Python 3 判断2个字典相同
Aug 06 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
基于python实现上传文件到OSS代码实例
May 09 Python
Python小白不正确的使用类变量实例
May 29 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 #Python
python实现代码审查自动回复消息
Feb 01 #Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
Feb 01 #Python
python 列表推导和生成器表达式的使用
Feb 01 #Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 #Python
深入理解Python变量的数据类型和存储
Feb 01 #Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 #Python
You might like
php访问查询mysql数据的三种方法
2006/10/09 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
php不用正则验证真假身份证
2013/11/06 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python字典遍历操作实例小结
2019/03/05 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
毕业生机械建模求职信
2013/10/14 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
高中生家长寄语大全
2014/04/03 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
Nginx反向代理、重定向
2022/04/13 Servers