Pyecharts绘制全球流向图的示例代码


Posted in Python onJanuary 08, 2020

安装

pip(3) install pyecharts

此文版本为v1.6
此文版本为v1.6
此文版本为v1.6

效果图

Pyecharts绘制全球流向图的示例代码

使用Pycharts绘制一个如上图类似的全球流向图。

pyecharts里的地理图标总共有三种—
Geo:地理坐标系,Map:地图,Bmap:百度地图。
Map地图可以绘制全球地图,但不能绘制带有流向的效果图,所以此处需要使用Geo地理坐标系图。

Geo图的类型有scatter(散点图),effectScatter(涟漪散点图),heatmap(热力图),lines(流向图)。

散点图不用说,就是正常的散点图。涟漪散点图类似带有波纹的散点图,像水的涟漪效果一样。

效果如下:

Pyecharts绘制全球流向图的示例代码

热力图也不用说,就是正常的热力图效果。

我们需要绘制的是流向图。

# 导入Geo包,注意1.x版本的导入跟0.x版本的导入差别
from pyecharts.charts import Geo
# 导入配置项
from pyecharts import options as opts
# ChartType:图标类型,SymbolType:标记点类型
from pyecharts .globals import ChartType, SymbolType

geo = Geo()

# 地图类型,世界地图可换为world
geo.add_schema(maptype="china")
# 添加数据点
geo.add("",[("北京",10),("上海",20),("广州",30),("成都",40),("哈尔滨",50)],type_=ChartType.EFFECT_SCATTER)
# 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 
#'diamond', 'pin', 'arrow', 'none'
geo.add("geo-lines",
[("上海","广州"),
("上海","新疆"),
("上海","哈尔滨"),
("成都","北京"),
("哈尔滨","广州")],
type_=ChartType.LINES,
effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,symbol_size=5,color="yellow"),
linestyle_opts=opts.LineStyleOpts(curve=0.2),
    is_large=True)
# 不显示标签
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 设置图标标题,visualmap_opts=opts.VisualMapOpts()为左下角的视觉映射配置项
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),title_opts=opts.TitleOpts(title="Geo-Lines"))
# 直接在notebook里显示图表
geo.render_notebook()
# 生成html文件,可传入位置参数
geo.render("mychart.html")

效果如图:

Pyecharts绘制全球流向图的示例代码

在绘制国内的流向图的时候是没有问题的,但是当我们把地点换为国际城市或者其他国家的时候就是报错了。

因为Geo图的坐标引用自pyecharts.datasets.city_coordinates.json。我们打开这和文件可以看到国内的城市坐标。这个文件里的全部数据都是国内的城市,当我们想绘制全球的流向图的时候,Geo引用找不到国际地点就i会报错了。

Pyecharts绘制全球流向图的示例代码

解决办法有两个:

1.新增坐标点

def add_coordinate(
  # 坐标地点名称
  name: str,
  # 经度
  longitude: Numeric,
  # 纬度
  latitude: Numeric,
)
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts .globals import ChartType, SymbolType, GeoType

geo = Geo()

# 新增坐标点,添加名称跟经纬度
geo.add_coordinate(name="China",longitude=104.195,latitude=35.675)
geo.add_coordinate(name="Australia",longitude=133.775,latitude=-25.274)
geo.add_coordinate(name="Brazil",longitude=-51.925,latitude=-14.235)
geo.add_coordinate(name="South Africa",longitude=22.937,latitude=-30.559)
geo.add_coordinate(name="India",longitude=78.962,latitude=20.593)
geo.add_coordinate(name="Peru",longitude=-75.015,latitude=-9.189)
geo.add_coordinate(name="Iran",longitude=53.688,latitude=32.427)
geo.add_coordinate(name="Ukraine",longitude=31.165,latitude=48.379)
geo.add_coordinate(name="Canada",longitude=-106.346,latitude=56.130)
geo.add_coordinate(name="Mongolia",longitude=103.847,latitude=46.862)
geo.add_coordinate(name="Russia",longitude=37.618,latitude=55.751)
geo.add_coordinate(name="Mauritania",longitude=21.008,latitude=-10.941)
geo.add_coordinate(name="Kazakhstan",longitude=66.924,latitude=48.019)
geo.add_coordinate(name="UAE",longitude=53.848,latitude=23.424)
geo.add_coordinate(name="Malaysia",longitude=101.976,latitude=4.210)
geo.add_coordinate(name="New Zealand",longitude=174.886,latitude=-40.900)
geo.add_coordinate(name="Indonesia",longitude=113.921,latitude=-0.789)
geo.add_coordinate(name="Sweden",longitude=18.643,latitude=60.128)
geo.add_coordinate(name="Mexico",longitude=-102.553,latitude=23.634)
geo.add_coordinate(name="Sierra Leone",longitude=-11.779,latitude=8.461)

# 添加数据项
geo.add_schema(maptype="world")
geo.add("",[("Australia",128326),
      ("Brazil",44037),
      ("South Africa",7649),
      ("India",3562),
      ("Peru",2779),
      ("Iran",2698),
      ("Ukrainie",2040),
      ("Canada",1792),
      ("Mongolia",1514),
      ("Russia",1069),
      ("Mauritania",1374),
      ("Kazakhsan",701),
      ("UAE",490),
      ("Malaysia",554),
      ("New Zealand",422),
      ("Indonesia",148),
      ("Sweden",113),
      ("Mexico",121),
      ("Sierra Leone",109),
      ],type_=ChartType.EFFECT_SCATTER)

# 绘制流向
geo.add("流向图",[
  ("Australia","China"),
  ("Brazil","China"),
  ("South Africa","China"),
  ("India","China"),
  ("Peru","China"),
  ("Iran","China"),
  ("Ukraine","China"),
  ("Canada","China"),
  ("Mongolia","China"),
  ("Russia","China"),
  ("Mauritania","China"),
  ("Kazakhstan","China"),
  ("UAE","China"),
  ("Malaysia","China"),
  ("New Zealand","China"),
  ("Indonesia","China"),
  ("Sweden","China"),
  ("Mexico","China"),
  ("Sierra Leone","China"),
      ],
    type_= GeoType.LINES,
   effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,symbol_size=5,color="yellow"),
    linestyle_opts=opts.LineStyleOpts(curve=0.2),
    )

geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=130000),title_opts=opts.TitleOpts(title="mygeo"))
geo.render()

效果如下:颜色表示各数据点大小。(用线条粗细表示大小还不知道,知道的盆友可以告诉我)

Pyecharts绘制全球流向图的示例代码

这种添加坐标点的办法太麻烦了,需要手动一个个添加,十分不方便。

2.添加坐标点文件。

以JSON文件格式批量新增坐标点。

def add_coordinate_json(
  # json 文件格式的坐标数据
  # 格式如下
  # {
  #  "阿城": [126.58, 45.32],
  #  "阿克苏": [80.19, 41.09]
  # }
  json_file: str
)

如果我们有一份全球的数据坐标点文件我们就可以使用这个添加文件的方式批量导入坐标点。

geo.add_coordinate_json(json_file="world_country.json")

可以直接用这一步替代添加坐标点的步骤。

world_country.json如下图所示。

Pyecharts绘制全球流向图的示例代码

它是一个各个国家的名称及坐标点文件。导入之后就可以添加数据项了。

还可以直接把这个文件追加到pyechats.datasets.city_coordinates.json文件里 ,这样就可以一劳永逸,下次直接写国家名称的时候就可以读取到。

绘制全球流向图就完成了。

其他细节可以参考官方文档:http://pyecharts.org/#/zh-cn/

渲染成图片

API:

def make_snapshot(
  # 渲染引擎,可选 selenium 或者 phantomjs
  engine: Any,

  # 传入 HTML 文件路径
  file_name: str,

  # 输出图片路径
  output_name: str,

  # 延迟时间,避免图还没渲染完成就生成了图片,造成图片不完整
  delay: float = 2,

  # 像素比例,用于调节图片质量
  pixel_ratio: int = 2,

  # 渲染完图片是否删除原 HTML 文件
  is_remove_html: bool = False,

  # 浏览器类型,目前仅支持 Chrome, Safari,使用 snapshot-selenium 时有效
  browser: str = "Chrome",
  **kwargs,
)

使用:

from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot


make_snapshot(snapshot,"全球流向.html","流向2.png",delay=5)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
优化Python代码使其加快作用域内的查找
Mar 30 Python
用Python解析XML的几种常见方法的介绍
Apr 09 Python
Python smallseg分词用法实例分析
May 28 Python
python计算圆周率pi的方法
Jul 11 Python
python中的lambda表达式用法详解
Jun 22 Python
python访问抓取网页常用命令总结
Apr 11 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 Python
python opencv旋转图片的使用方法
Jun 04 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 #Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 #Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 #Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 #Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 #Python
pyinstaller还原python代码过程图解
Jan 08 #Python
python Tensor和Array对比分析
Jan 08 #Python
You might like
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
php中数组首字符过滤功能代码
2012/07/31 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php格式化电话号码的方法
2015/04/24 PHP
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python入门篇之数字
2014/10/20 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
python函数与方法的区别总结
2019/06/23 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
企业管理培训感言
2014/01/27 职场文书
12月红领巾广播稿
2014/02/13 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
单位活动策划方案
2014/08/17 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
三方股东合作协议书
2014/10/28 职场文书
一年级语文教学随笔
2015/08/14 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记