一文带你掌握Pyecharts地理数据可视化的方法


Posted in Python onFebruary 06, 2021

本文主要介绍了Pyecharts地理数据可视化,分享给大家,具体如下:

一文带你掌握Pyecharts地理数据可视化的方法

一、Pyecharts简介和安装

1. 简介

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

  • 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
  • 囊括了 30+ 种常见图表,应有尽有
  • 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
  • 可轻松集成至 Flask,Sanic,Django 等主流 Web 框架
  • 高度灵活的配置项,可轻松搭配出精美的图表
  • 详细的文档和示例,帮助开发者更快的上手项目
  • 多达 400+ 地图文件,并且支持原生百度地图,为地理数据可视化提供强有力的支持

pyecharts版本v0.5.x 和 v1 间不兼容,v1 是一个全新的版本,语法也有很大不同。

2. 安装

安装pyecharts

pip install pyecharts -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import pyecharts
print(pyecharts.__version__)     # 查看当前pyecharts版本

安装相关的地图扩展包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-countries-pypkg  		# 全球国家地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-provinces-pypkg  # 中国省级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-cities-pypkg   # 中国市级地图
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple echarts-china-counties-pypkg  # 中国县区级地图

二、地图可视化

1. 世界地图

利用 Starbucks.csv 中的数据,首先计算每个国家(Country)对应的门店数量,然后使用世界地图可视化展示星巴克门面店在全球的数量分布。

# -*- coding: UTF-8 -*-
"""
@File  :demo1.py
@Author :叶庭云
@CSDN  :https://yetingyun.blog.csdn.net/
"""
import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

# pandas读取csv文件里的数据
df = pd.read_csv("Starbucks.csv")['Country']
# 统计各个地区星巴克门店数量
data = df.value_counts()
datas = [(i, int(j)) for i, j in zip(data.index, data.values)]


# 实例化一个Map对象
map_ = Map(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
# 世界地图
map_.add("门店数量", data_pair=datas, maptype="world")
map_.set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 不显示label
map_.set_global_opts(
   title_opts=opts.TitleOpts(title="星巴克门店数量在全球分布", pos_left='40%', pos_top='10'),  # 调整title位置
   legend_opts=opts.LegendOpts(is_show=False),
   visualmap_opts=opts.VisualMapOpts(max_=13608, min_=1, is_piecewise=True,
   pieces=[{"max": 9, "min": 1, "label": "1-9", "color": "#00FFFF"},    # 分段 添加图例注释和颜色
     {"max": 99, "min": 10, "label": "10-99", "color": "#A52A2A"},
     {"max": 499, "min": 100, "label": "100-499", "color": "#0000FF	"},
     {"max": 999, "min": 500, "label": "500-999", "color": "#FF00FF"},
     {"max": 2000, "min": 1000, "label": "1000-2000", "color": "#228B22"},
     {"max": 3000, "min": 2000, "label": "2000-3000", "color": "#FF0000"},
     {"max": 20000, "min": 10000, "label": ">=10000", "color": "#FFD700"}
       ])
   )

# 渲染在网页上
map_.render('星巴克门店在全球的分布.html')

运行效果如下:

一文带你掌握Pyecharts地理数据可视化的方法

2. 国家地图

涟漪散点图

利用 china.csv 中的数据,首先计算每个城市(City)对应的门店数量,然后使用 pyecharts 包内 Geo 模块绘制星巴克门面店在中国各城市的数量分布的涟漪散点地图。

import pandas as pd
from pyecharts.globals import ThemeType, CurrentConfig, GeoType
from pyecharts import options as opts
from pyecharts.charts import Geo

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# pandas读取csv文件数据
df = pd.read_csv("china.csv")['City']
data = df.value_counts()

datas = [(i, int(j)) for i, j in zip(data.index, data.values)]
print(datas)

geo = Geo(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.DARK))
geo.add_schema(maptype='china', label_opts=opts.LabelOpts(is_show=True))  # 显示label 省名
geo.add('门店数量', data_pair=datas, type_=GeoType.EFFECT_SCATTER, symbol_size=8)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(title_opts=opts.TitleOpts(title='星巴克门店在中国的分布'),
          visualmap_opts=opts.VisualMapOpts(max_=550, is_piecewise=True,
          pieces=[{"max": 50, "min": 0, "label": "0-50", "color": "#708090"},    # 分段 添加图例注释 和颜色
               {"max": 100, "min": 51, "label": "51-100", "color": "#00FFFF"},
               {"max": 200, "min": 101, "label": "101-200", "color": "#00008B"},
               {"max": 300, "min": 201, "label": "201-300", "color": "#8B008B"},
               {"max": 600, "min": 500, "label": "500-600", "color": "#FF0000"},
                 ])
          )

geo.render("星巴克门店在中国的分布.html")

运行效果如下:

一文带你掌握Pyecharts地理数据可视化的方法

动态轨迹图

# -*- coding: UTF-8 -*-
"""
@File  :demo3.py
@Author :叶庭云
@CSDN  :https://yetingyun.blog.csdn.net/
"""
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, SymbolType, CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 链式调用
c = (
  Geo()
  .add_schema(
    maptype="china",
    itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
    label_opts=opts.LabelOpts(is_show=True)
  )
  .add(
    "",
    [("广州", 55), ("北京", 66), ("杭州", 77), ("重庆", 88), ('成都', 100), ('海口', 80)],
    type_=ChartType.EFFECT_SCATTER,
    color="white",
  )
  .add(
    "",
    [("广州", "上海"), ("广州", "北京"), ("广州", "杭州"), ("广州", "重庆"),
     ('成都', '海口'), ('海口', '北京'), ('海口', '重庆'), ('重庆', '上海')
     ],
    type_=ChartType.LINES,
    effect_opts=opts.EffectOpts(
      symbol=SymbolType.ARROW, symbol_size=6, color="blue" # 轨迹线蓝色
    ),
    linestyle_opts=opts.LineStyleOpts(curve=0.2), # 轨迹线弯曲度
  )
  .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
  .set_global_opts(title_opts=opts.TitleOpts(title="动态轨迹图"))
  .render("geo_lines_background.html")
)

运行效果如下:

一文带你掌握Pyecharts地理数据可视化的方法

3. 省市地图

热力图

# -*- coding: UTF-8 -*-
"""
@File  :demo4.py
@Author :叶庭云
@CSDN  :https://yetingyun.blog.csdn.net/
"""
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.faker import Faker
from pyecharts.globals import GeoType, CurrentConfig

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

c = (
  Geo()
  .add_schema(maptype="广东", label_opts=opts.LabelOpts(is_show=True))
  .add(
    "热力图",
    [list(z) for z in zip(Faker.guangdong_city, Faker.values())],
    type_=GeoType.HEATMAP,
  )
  .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
  .set_global_opts(
    visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="Geo-广东地图")
  )
  .render("geo_guangdong.html")
)

运行效果如下:

一文带你掌握Pyecharts地理数据可视化的方法

地图上批量添加经纬度数据

数据来源于美团网成都地区酒店信息,利用其中酒店的经纬度数据,批量添加在地图上可视化。

# -*- coding: UTF-8 -*-
"""
@File  :demo5.py
@Author :叶庭云
@CSDN  :https://yetingyun.blog.csdn.net/
"""
import pandas as pd   
from pyecharts.charts import Geo  
from pyecharts import options as opts  
from pyecharts.globals import GeoType, CurrentConfig, ThemeType

CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 读取Excel数据 数据来源美团网酒店信息
df = pd.read_excel("hotel.xlsx")

# 获取 地点 经纬度信息
geo_sight_coord = {df.iloc[i]['酒店地址']: [df.iloc[i]['经度'], df.iloc[i]['纬度']] for i in range(len(df))}
data = [(df['酒店地址'][j], f"{int(df['最低价'][j])}元(最低价)") for j in range(len(df))]
# print(data)
# print(geo_sight_coord)

# 实例化Geo对象 导入成都地图
g = Geo(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, width="1000px", height="600px"))
g.add_schema(maptype="成都")

for k, v in list(geo_sight_coord.items()):
  # 添加地址、经纬度数据
  g.add_coordinate(k, v[0], v[1])

# 生成涟漪散点图
g.add("", data_pair=data, type_=GeoType.EFFECT_SCATTER, symbol_size=6)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
g.set_global_opts(title_opts=opts.TitleOpts(title="成都-酒店地址分布"))
g.render("酒店地址分布.html")

运行效果如下:

一文带你掌握Pyecharts地理数据可视化的方法

到此这篇关于一文带你掌握Pyecharts地理数据可视化的方法的文章就介绍到这了,更多相关Pyecharts地理数据可视化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
Python装饰器用法实例总结
May 26 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
Django框架模板介绍
Jan 15 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python操作注册表详细步骤介绍
Feb 05 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
Python模块常用四种安装方式
Oct 20 Python
python3 字符串str和bytes相互转换
Mar 23 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 #Python
Python第三方库安装缓慢的解决方法
Feb 06 #Python
python中threading和queue库实现多线程编程
Feb 06 #Python
Python3爬虫ChromeDriver的安装实例
Feb 06 #Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 #Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 #Python
python批量提取图片信息并保存的实现
Feb 05 #Python
You might like
用PHP编写PDF文档生成器
2006/10/09 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
PDO::commit讲解
2019/01/27 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
JS实现方形抽奖效果
2018/08/27 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
浅析python连接数据库的重要事项
2021/02/22 Python
哈弗商学院毕业生求职信
2014/02/26 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
2014年标准化工作总结
2014/12/17 职场文书
水电施工员岗位职责
2015/04/11 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL