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中执行系统命令的方法示例详解
Sep 14 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
python3+PyQt5泛型委托详解
Apr 24 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python实现接口并发测试脚本
Jun 25 Python
django 控制页面跳转的例子
Aug 06 Python
关于python3中setup.py小概念解析
Aug 22 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python 的topk算法实例
Apr 02 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
vscode调试django项目的方法
Aug 06 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
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php实现的递归提成方案实例
2015/11/14 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
python time模块用法实例详解
2014/09/11 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
物理教学随笔感言
2014/02/22 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
建筑安全生产责任书
2014/07/22 职场文书
婚内分居协议书范文
2014/11/26 职场文书
2015元旦标语横幅
2014/12/09 职场文书
碧霞祠导游词
2015/02/09 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
介绍信范文大全
2015/05/07 职场文书
2019新员工心得体会
2019/06/25 职场文书