Python pyecharts实时画图自定义可视化经纬度热力图
作者:数据人阿多 发布时间:2023-12-24 10:14:21
背景
在业务数据统计分析中基本都会涉及到各省区的分析,数据可视化是数据分析的一把利器,这些省区的数据一般会用地图可视化出来,这样一些规律可以被一面了然发现
地图有很多可视化类型,比如:基本地理图、热力图、路径图、涟漪图 等,本篇文章主要介绍 热力图,使用的工具百度开源 pyecharts
模拟数据以十一期间全国旅游景点热度为例(虚构数据)
模拟数据
基于pyecharts内置经纬度的热力图
pyecharts 中自带了一些城市的经纬度,在画图时只要列出城市 or 省份的名字,即可在地图中自动展示,pyecharts会根据城市 or 省份的名字自动提取到经纬度
安装完pyecharts包之后,可以在pyecharts包文件夹里面找到相应的文件city_coordinates.json
,里面保存了大量的地理名与经纬度的信息
一般路径如下:xxxxxx\Lib\site-packages\pyecharts\datasets\city_coordinates.json
下面用模拟数据中 城市
、热度
列来进行热力图可视化
左右滑动查看完整代码
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import BMap
from pyecharts.globals import BMapType
import json
data=pd.read_excel('热力图模拟数据.xlsx')
hotmap = (
BMap(is_ignore_nonexistent_coord=True, #忽略不存在的坐标
init_opts=opts.InitOpts(width="1300px", height="600px"))
.add_schema(baidu_ak="自己申请的key", center=[120.13066322374, 30.240018034923],
zoom=5, # 当前视角的缩放比例
is_roam=True # 是否开启鼠标缩放和平移漫游
)
.add(
"热度", #图例
data_pair=[list(z) for z in zip(data['城市'].to_list(), data['热度'].to_list())],
type_="heatmap",
label_opts=opts.LabelOpts(formatter="{b}"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="十一期间全国旅游景点热度",
pos_left='center',
title_textstyle_opts=opts.TextStyleOpts(font_size=32)
),
legend_opts=opts.LegendOpts(pos_right='20%'),
visualmap_opts=opts.VisualMapOpts()
)
.add_control_panel(
copyright_control_opts=opts.BMapCopyrightTypeOpts(position=3),
maptype_control_opts=opts.BMapTypeControlOpts(
type_=BMapType.MAPTYPE_CONTROL_DROPDOWN
),
scale_control_opts=opts.BMapScaleControlOpts(),
overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True),
navigation_control_opts=opts.BMapNavigationControlOpts(),
geo_location_control_opts=opts.BMapGeoLocationControlOpts(),
)
.render("基于pyecharts内置经纬度的热力图.html")
)
#hotmap.render_notebook()
内置经纬度
基于自定义经纬度的热力图
因pyecharts中的 city_coordinates.json
里面存放的均是一些常用的地理经纬度,如果想使用自定义的经纬度,pyecharts也是支持的
下面用模拟数据中 经度
、维度
、热度
列来进行热力图可视化
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import BMap
from pyecharts.globals import BMapType
import json
data=pd.read_excel('热力图模拟数据.xlsx')
data_json={}
for index,row in data.iterrows():
data_json[row['地名']]=[float(row['经度']),float(row['维度'])]
with open("BMAP.json","w") as f:
json.dump(data_json,f)
hotmap = (
BMap(is_ignore_nonexistent_coord=True, #忽略不存在的坐标
init_opts=opts.InitOpts(width="1300px", height="600px"))
.add_schema(baidu_ak="自己申请的key", center=[120.13066322374, 30.240018034923],
zoom=5, # 当前视角的缩放比例
is_roam=True # 是否开启鼠标缩放和平移漫游
)
.add_coordinate_json("BMAP.json") #加载自定义坐标
.add(
"热度", #图例
data_pair=[list(z) for z in zip(data['地名'].to_list(), data['热度'].to_list())],
type_="heatmap",
label_opts=opts.LabelOpts(formatter="{b}"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="十一期间全国旅游景点热度",
pos_left='center',
title_textstyle_opts=opts.TextStyleOpts(font_size=32)
),
legend_opts=opts.LegendOpts(pos_right='20%'),
visualmap_opts=opts.VisualMapOpts(max_=20) #设置最大值,目的是为了能够精确查看自定坐标位置
)
.add_control_panel(
copyright_control_opts=opts.BMapCopyrightTypeOpts(position=3),
maptype_control_opts=opts.BMapTypeControlOpts(
type_=BMapType.MAPTYPE_CONTROL_DROPDOWN
),
scale_control_opts=opts.BMapScaleControlOpts(),
overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True),
navigation_control_opts=opts.BMapNavigationControlOpts(),
geo_location_control_opts=opts.BMapGeoLocationControlOpts(),
)
.render("基于自定义经纬度的热力图.html")
)
#hotmap.render_notebook()
自定义经纬度
pyecharts库缺点
没有现成的方法用来直接导入自定义坐标,需要先把自定义坐标写在json文件中,然后再通过加载文件实现导入,而没有一个直接导入自定义坐标的方法,这个可以从源码中看出来,如果有一个 add_coordinate_dict
函数就完美了
缺点
不同地图坐标系区别
我们通常用经纬度来表示一个地理位置,但是由于一些原因,我们从不同渠道得到的经纬度信息可能并不是在同一个坐标系下。
高德地图、腾讯地图以及谷歌中国区地图使用的是GCJ-02坐标系
百度地图使用的是BD-09坐标系
底层接口(HTML5 Geolocation或ios、安卓API)通过GPS设备获取的坐标使用的是WGS-84坐标系
不同的坐标系之间可能有几十到几百米的偏移,所以在开发基于地图的产品,或者做地理数据可视化时,我们需要修正不同坐标系之间的偏差。
WGS-84 - 世界大地测量系统
WGS-84(World Geodetic System, WGS)是使用最广泛的坐标系,也是 * 用的坐标系,GPS设备得到的经纬度就是在WGS84坐标系下的经纬度。通常通过底层接口得到的定位信息都是WGS84坐标系
GCJ-02 - 国测局坐标
GCJ-02(G-Guojia国家,C-Cehui测绘,J-Ju局),又被称为火星坐标系,是一种基于WGS-84制定的大地测量系统,由中国国测局制定。此坐标系所采用的混淆算法会在经纬度中加入随机的偏移。
国家规定,中国大陆所有公开地理数据都需要至少用GCJ-02进行加密,也就是说我们从国内公司的产品中得到的数据,一定是经过了加密的。绝大部分国内互联网地图提供商都是使用GCJ-02坐标系,包括高德地图,谷歌地图中国区等。
BD-09 - 百度坐标系
BD-09(Baidu, BD)是百度地图使用的地理坐标系,其在GCJ-02上多增加了一次变换,用来保护用户隐私。从百度产品中得到的坐标都是BD-09坐标系
来源:https://www.jianshu.com/p/18f8fa3fa874


猜你喜欢
- 本文实例为大家分享了vue组件watch属性的具体代码,供大家参考,具体内容如下<!doctype html><html&
- 概念Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?以爬虫为例,需要控制同时爬取的线程数,例子中创
- 本文为大家分享了python查看微信消息撤回的具体代码,供大家参考,具体内容如下1.安装itchatitchat是一个开源的python微信
- 这篇文章主要介绍了django-多对多表的创建和插入代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 垃圾分类是现代城市中越来越重要的问题,通过垃圾分类可以有效地减少环境污染和资源浪费。随着人工智能技术的发展,使用机器学习模型进行垃圾分类已经
- 提到数组,大家都不陌生,什么是数组行列转置呢?其实也很简单,如下图所示,行列转置就是将数组元素的存放方式进行转换,原来保存在第一列的数据,将
- Python 中迭代器与生成器实例详解本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下
- 本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:用类作为装饰器示例一最初代码:class bol(object): d
- 本文实例讲述了PHP实现的XXTEA加密解密算法。分享给大家供大家参考,具体如下:<?php/** * Xxtea 加密实现类 */c
- import wx import imagesclass DemoTaskBarIcon(wx.TaskBarIcon): &nb
- 日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。1. static Level DEBUG :DE
- php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用
- 你也许已经掌握了id、class、后台选择器这些基本的css选择器。但这远远不是css的全部。下面向大家系统的解析css中30个最常用的选择
- 首先说下,由于最新的 0.8 版还是开发版本,因此我使用的是 0.79 版,API 也许会有些不同。因为我是搭配 MySQL InnoDB
- 1、爬取网页分析爬取的目标网址为:https://www.gushiwen.cn/在登陆界面需要做的工作有,获取验证码图片,并识别该验证码,
- 安装pdfminer 库windows 下安装pdfminer3kpip install pdfminer3kLiunx 下安装pdfmin
- 前言在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Py
- 内容摘要:现在InterNet 越来越成为生活中不可或缺的一部分,制作网页的动态语言也越来越多,主要流行的有以下几种,ASP,PH
- 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前
- MySQL—触发器将两个关联的操作步骤写到程序里面,并且要用事务包裹起来,确保两个操作称为一个原子操作,要么全部执行,要