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

一、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

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

在这里有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)])

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

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

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

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

(0)

相关推荐

  • python实现Pyecharts实现动态地图(Map、Geo)

    一些经常画图的开发人员大概都用过echart,不过小白用Python比较多,学习了python下的Pyecharts,发现这个包真的很强大.下面是小白对动态地图的实践案例: 假如有这样一组数据,全国每个城市的酒店数(虚拟),那么如何在地图上展示呢? 1.Python需要安装Pycharts 当安装完成后需要添加地图包: 安装pyecharts后还需要根据需要安装城市.省份等地图包,下面是对包的整理,大家可以根据需要下载. pip install pyecharts pip install ech

  • 详解用pyecharts Geo实现动态数据热力图城市找不到问题解决

    pyecharts 是一个用于生成 Echarts 图表的类库. Echarts 是百度开源的一个数据可视化 JS 库.主要用于数据可视化. 本文主要是用pycharts中的Geo绘制中国地图,在图中显示出各个地区的人均销售额 传入的数据形如:[('上海',30), ('北京',50), ... ...] li=[] for i,row in filtered.iterrows(): li.append((row['city'],int(row['per_capita']))) geo = Ge

  • Pyecharts 动态地图 geo()和map()的安装与用法详解

    把一些地域性比较明显的数据显示在一张地图上,远比给别人一个 Excel 文件好得多. Matplotlib 中也有画地图的函数,但是是静态图,因此这里主要讲 Pyecharts 模块中的画图功能. 安装Pyecharts 方法一:pip install ... 方法二:conda install -c anaconda pyecharts 方法三:下载模块--安装 https://pypi.org/project/pyecharts/0.1.9.4/#files下载模块: 将模块放进 xx 路径

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

    一.Pyeharts简介 pyecharts 是一个用于生成 Echarts 图表的类库.用 Echarts 生成的图可视化效果很不错,pyecharts库是用来与 Python 进行对接,方便在 Python 中直接使用数据生成图. 最新的Pyecharts库版本是v1,且与老版本 v0.5.X 是不兼容的,v0.5.X版本也已不再维护.新旧版本的Geo有着较大改动,本篇均是基于旧版本0.5.11 二.Pyecharts安装 pyecharts的安装说明很简单,也有很多大佬写了过程,本篇不赘述

  • Keras中 ImageDataGenerator函数的参数用法

    一.Keras ImageDataGenerator参数 from keras.preprocessing.image import ImageDataGenerator keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization = False, samplewise_std_normalization

  • 深入理解js 中async 函数的含义和用法

    一.终极解决 异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种各样的方案,试图解决这个问题. 从最早的回调函数,到 Promise 对象,再到 Generator 函数,每次都有所改进,但又让人觉得不彻底.它们都有额外的复杂性,都需要理解抽象的底层运行机制. 异步I/O不就是读取一个文件吗,干嘛要搞得这么复杂?异步编程的最高境界,就是根本不用关心它是不是异步. async 函数就是隧道尽头的亮光,很多人认为它是异步操作的终极解决方案. 二.async 函数是什么? 一句话,

  • javascript中parseInt()函数的定义和用法分析

    本文实例讲述了javascript中parseInt()函数的定义和用法.分享给大家供大家参考.具体分析如下: 此函数可以解析一个字符串,并返回一个整数. 语法结构: 复制代码 代码如下: parseInt(string, type) 参数列表: 参数 描述 string 必需.要被解析的字符串. type 可选.表示要解析的数字的基数,通俗的说就是数字的进制,比如二进制.八进制或者十六进制.该值介于2 ~ 36之间. 详细说明: 一.指定type参数: 指定type参数后,函数就会按照指定的t

  • 一文了解Go语言中的函数与方法的用法

    目录 函数定义语法 函数定义示例 无返回值函数 单一返回值函数 多返回值函数 方法(Method)定义 方法(Method)示例 基本类型 结构体类型 函数定义语法 与大部分语言一致,Go语言中的函数定义与其他语言基本一致 func function_name(Parameter-list) { // function body... } func function_name(Parameter-list) Return-Type { // function body... } func fun

  • Python函数关键字参数及用法详解

    目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应.而本节将介绍的关键字参数,则可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便. 关键字参数是指使用形式参数的名字来确定输入的参数值.通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可. 因此,Python 函数的参数名应该具有更好的语义,这样程序可以立刻明确传入函数的每个参数的含义. 例如,在下面的程序中就使用到了关键字参数的形式给函数传参: def di

  • Python中return函数返回值实例用法

    在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到的使用return能够进行多值输出,这才是我们需要抓住知识的重点,针对上述所提及的内容,都可以来往下看文章,答案都在文章内容获取哦~ return 添加返回值 return 显示返回对象 返回值接受:value = func() 例子:计算学成最高分 listv = [90,80,88,77,66] # 分数计算return高分 def scoreCalculate(values)

  • python中lower函数实现方法及用法讲解

    之前小编介绍过python中将字符串小写字符转为大写的upper函数的使用方法(upper函数).有将小写转为大写的需要,那也有将大写转为小写的情况.本文主要介绍在python中可以将字符串大写自摸转换为小写字母的lower函数. 1.lower() 转换字符串中所有大写字符为小写 2.语法 str.lower() -> str 3.返回值 返回将字符串中的所有大写字母转换为小写字母的字符串 4.使用实例 #!/usr/bin/python3 str = "ABCDEFG" pr

  • sql中mod()函数取余数的用法

    Mod(a,b) 在sql中的意思是 a / b 的余数(即 a % b ) 基础用法:如果id需要是偶数或者奇数时就可以使用mod. mod(id,2)=1 是指id是奇数. mod(id,2)=0 是指id是偶数. select mod(3,2) from dual 执行如图: 例如:根据身份证判定该员工是否是男女,从而实现对性别的更新. 身份证号的第17位数字,奇数为男性,偶数为女性 SEX CHAR(1) NOT NULL, --** 性别: 1 男,2 女 UPDATE table_n

  • 关于python中readlines函数的参数hint的相关知识总结

    readlines的帮助信息 >>> fr=open('readme.txt') >>> help(fr.readlines) Help on built-in function readlines: readlines(hint=-1, /) method of _io.TextIOWrapper instance Return a list of lines from the stream. hint can be specified to control the

随机推荐