一文带你掌握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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python对多属性的重复数据去重实例
Apr 18 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
基于Django统计博客文章阅读量
Oct 29 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
python学生管理系统的实现
Apr 05 Python
Python类class参数self原理解析
Nov 19 Python
python中把元组转换为namedtuple方法
Dec 09 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
Yii实现简单分页的方法
2016/04/29 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
动态加载js和css(外部文件)
2013/04/17 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
js评分组件使用详解
2017/06/06 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python实现按首字母分类查找功能
2019/10/31 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
心得体会怎么写
2013/12/30 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015年市场部工作总结
2015/04/30 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android