Pyecharts绘制全球流向图
安装
pip(3) install pyecharts
此文版本为v1.6
此文版本为v1.6
此文版本为v1.6
效果图
使用Pycharts绘制一个如上图类似的全球流向图。
pyecharts里的地理图标总共有三种—
Geo:地理坐标系,Map:地图,Bmap:百度地图。
Map地图可以绘制全球地图,但不能绘制带有流向的效果图,所以此处需要使用Geo地理坐标系图。
Geo图的类型有scatter(散点图),effectScatter(涟漪散点图),heatmap(热力图),lines(流向图)。
散点图不用说,就是正常的散点图。涟漪散点图类似带有波纹的散点图,像水的涟漪效果一样。
效果如下:
热力图也不用说,就是正常的热力图效果。
我们需要绘制的是流向图。
# 导入Geo包,注意1.x版本的导入跟0.x版本的导入差别
from pyecharts.charts import Geo
# 导入配置项
from pyecharts import options as opts
# ChartType:图标类型,SymbolType:标记点类型
from pyecharts .globals import ChartType, SymbolTypegeo = 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")
效果如图:
在绘制国内的流向图的时候是没有问题的,但是当我们把地点换为国际城市或者其他国家的时候就是报错了。
因为Geo图的坐标引用自pyecharts.datasets.city_coordinates.json。我们打开这和文件可以看到国内的城市坐标。这个文件里的全部数据都是国内的城市,当我们想绘制全球的流向图的时候,Geo引用找不到国际地点就i会报错了。
解决办法有两个:
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, GeoTypegeo = 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()
效果如下:颜色表示各数据点大小。(用线条粗细表示大小还不知道,知道的盆友可以告诉我)
这种添加坐标点的办法太麻烦了,需要手动一个个添加,十分不方便。
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如下图所示。
它是一个各个国家的名称及坐标点文件。导入之后就可以添加数据项了。
还可以直接把这个文件追加到pyechats.datasets.city_coordinates.json文件里 ,这样就可以一劳永逸,下次直接写国家名称的时候就可以读取到。
绘制全球流向图就完成了。
其他细节可以参考官方文档:
http://pyecharts.org/#/zh-cn/
渲染成图片
API:
def make_snapshot(# 渲染引擎,可选 selenium 或者 phantomjsengine: 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 snapshotmake_snapshot(snapshot,"全球流向.html","流向2.png",delay=5)
Pyecharts绘制全球流向图相关推荐
- PyeCharts绘制K线图(续)
接着上一篇文章<Pyecharts绘制K线图>,今天来继续完善所绘制K线图的内容.介绍如何实现股票成交量及标记信号的绘制. 一.成交量柱状图的绘制 成交量柱状图的绘制要用到Bar().其用 ...
- pandas、pyecharts绘制基金走势图-01
纯属练手! 最近基金的消息比较热门,自己页在支付宝上买了点.查看各个基金的走势时,需要不断打开页面进行查看,比较麻烦.正好在尝试pandas.pyecharts,所以拿来练练手. 目标: 可以一次性查 ...
- python画k线图_小白学Python(14)——pyecharts 绘制K线图 Kline/Candlestick
Kline-基本示例 from pyecharts import options as opts from pyecharts.charts import Kline data = [ [2320.2 ...
- pyecharts绘制K线图,并添加辅助线
官方示例可以参考:https://gallery.pyecharts.org/#/Candlestick/kline_datazoom_slider 文章目录 绘制K线图 绘制有辅助线的K线图 绘制K ...
- 利用pyecharts绘制新浪微博传播图(文末附完整代码地址)
文章目录 任务 来龙去脉 过程 绘图代码 绘图参数分析 结点参数格式 联系参数格式 类别参数格式 总览 获取转发关系 构造数据结构 集成json文件 代码地址 任务 延续之前的爬虫任务,最初同学提出的 ...
- Pyecharts绘制上下组合图、左右组合图、一轴多图,超经典!
1. 上下组合 from pyecharts.charts import Bar, Line, Grid from pyecharts import options# 1.准备数据 country = ...
- Pyecharts绘制K线图
一.简介 Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 Python 是一门富有表达力的语言,很适合用于数据处理.当数据分析遇上数据可视 ...
- pandas、pyecharts绘制基金走势图-03
绘制pyecharts表格: 需要使用折线图展示,需要了解pyecharts.charts.Line的使用,可以参考链接文章. 在折线图上,对应的节点应该展示对应的横纵坐标的信息,参考这篇文章. 尽可 ...
- 用pyecharts绘制K线图
获取股票数据部分,方法很多.关键是后半部分,用非常简短的代码实现了K线图,pyecharts真强! from jqdatasdk import * import numpy as np from py ...
最新文章
- 一篇虚拟试穿的论文介绍
- MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数
- 谈谈java面向对象之抽象,手把手带你搞定java面试之面向对象
- Android系统截屏的实现(附代码)
- android学习总结
- UI 实用素材|可视化后台系统UI视觉界面
- .Net框架集WebClient类向WinCE平台上传文件(FTP方式)延迟15秒释疑
- 嵌入式电路设计(fpga电路设计)
- verilog系统任务之$random
- BZOJ1001: [BeiJing2006]狼抓兔子 (最小割)
- 路由守卫(全局钩子(全局路由守卫)、路由单独钩子(router独享守卫))
- java中怎么判断字符串的长度_java怎么判断字符串的字符串的长度
- 误码率曲线matlab代码,matlab画误码率曲线
- 正牌韦小宝之奉旨沟女 解说
- JAVA SE 基础汇总
- redis集群管理-5.0.14版本
- LaTeX报错解决办法:arithmetic: number too big ! Dimension too large.
- Cannot run code from this file in conjunction with non encoded files
- 【国产开源】兼容redis协议的内存数据库
- 详解 502 Bad Gateway nginx/xxx
热门文章
- 惊!一百多万人下载这些vscode摸鱼插件
- codePen前端编码神器
- 超级计算机绘制的天气云图预报软件,Photozoom帮你解析风云变幻的气象云图
- 常用文件的文件头-16进制
- MintUi项目实战(项目中BUG的处理)
- IDEA中设置调整字体大小的快捷键
- 什么是package和import:
- python爬电影排名用os bs4_python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比...
- 朋友圈设置成昨天发的_我终于将朋友圈设置成了三天可见!
- DWT-SVD数字水印