pyecharts动态轨迹图的实现示例


Posted in Python onApril 17, 2020

今天的主题!最近很多朋友问起pyecharts,尤其是地理坐标图的制作,都说被其图形之美给吸引到了。刚好今天也有同事问起来,那么今天就以pyecharts的动态地理轨迹图为例,说说该怎么使用pyecharts。

import pandas as pd   
import random
from pyecharts import GeoLines, Style  #地理轨迹图的类就是Geolines

在同事那里拿了一份国内部分城市的经纬度数据,首先用pandas读取数据,看看数据长什么样子,我们发现数据由一列组成,基本结构为'地名':['经度','纬度'],那么接下来我们将各地方的地名,经度,纬度提取出来。

#读取数据
data = pd.read_excel('./Desktop/data.xlsx',header = None,names = ['name'])
print(data.head())
        name
0   '上海': [121.4648,31.2891],
1    '东莞': [113.8953,22.901],
2   '东营': [118.7073,37.5513],
3    '中山': [113.4229,22.478],
4   '临汾': [111.4783,36.1615],
 
#写个遍历,把各地方的地名,经度,纬度提取出来,并存取在DataFrame中
city_list = []
lad_list = []
long_list = []
for i in data['name']:
  s = i.strip().split(':')     #去除前后空格,并以":"为分隔符分裂字符
  city = s[0][1:-1]        #取分裂后字符的第一个,得到地名
  lad = s[1].split(',')[0][2:]   #取分裂后字符的第二个,继续以','为分隔符分裂字符
  long = s[1].split(',')[1][:-2]
  city_list.append(city)
  lad_list.append(lad)
  long_list.append(long)
result = pd.DataFrame({'地点': city_list, '经度': lad_list, '纬度': long_list})

从result数据框我们看到,一共由114行,3列数据组成,114行太多了,画到地图上会很乱,于是我们用random包随机抽样20个出来做实验;

在抽样之前,我们需要将数据整理成geolines要求的格式,格式为[('始点','终点')];

另外因为我们要自定义各城市的经纬度(担心部分城市在地图显示不出来),pyecharts里面城市经纬度的格式为{'城市':['经度','纬度']},因此我们还需要组装一下我们数据。

#以东莞为始点,其他各个城市为终点,整理数据
plotting = result[result['地点'] != '东莞']['地点'].apply(lambda x : ('东莞',x))
 
#自定义各城市的经纬度
geo_cities_coords = {result.iloc[i]['地点']:[result.iloc[i]['经度'],result.iloc[i]['纬度']] for i in range(len(result))}
 
#随机抽样20个城市组合
plotting_data = random.sample(list(plotting),20)

数据已经准备好了,接下来就套路来了,先设定画布的格式,然后将geolines作为类Geolines的实例,接着设置geolines的参数,最后展示成果!

#设置画布的格式
style = Style(title_pos="center", 
       width=1000, 
       height=800)
 
#部分地理轨迹图的格式
style_geolines = style.add(is_label_show=True,
           line_curve=0.3,       #轨迹线的弯曲度,0-1
           line_opacity=0.6,      #轨迹线的透明度,0-1
           geo_effect_symbol='plane', #特效的图形,有circle,plane,pin等等
           geo_effect_symbolsize=10,  #特效图形的大小
           geo_effect_color='#7FFFD4', #特效的颜色
           geo_effect_traillength=0.1, #特效图形的拖尾效果,0-1
           label_color=['#FFA500', '#FFF68F'],#轨迹线的颜色,标签点的颜色,
           border_color='#97FFFF',   #边界的颜色
           geo_normal_color='#36648B', #地图的颜色
           label_formatter='{b}',   #标签格式
           legend_pos = 'left')
 
#作图
geolines = GeoLines('小文的pyechart出行轨迹图', **style.init_style)
geolines.add('从东莞出发',
       plotting_data,
       maptype='china',  #地图的类型,可以是省的地方,如'广东',也可以是地市,如'东莞'等等
       geo_cities_coords=geo_cities_coords,
       **style_geolines)
 
#发布,得到图形的html文件
geolines.render()

pyecharts动态轨迹图的实现示例

做到这里地理轨迹图已经完成了,那么假如我们想画一个既有出发又有回来的轨迹图怎么画呢?其实很简单,就在上面的基础上,再增加一个add就可以了,如下:

geolines.add('回到东莞',
       [('海口','东莞'),('拉萨','东莞'),('贵州','东莞'),('兰州','东莞')],
       maptype='china', 
       geo_cities_coords=geo_cities_coords,
       **style_geolines)

pyecharts动态轨迹图的实现示例

好了,我们看到了有几架小飞机回到东莞了,分别是我们设置的拉萨,贵州,海口和兰州,这样看似乎有点乱,那么我们可以设置一个参数,使得出发和回程分开,先设置is_legend_show = True,再设legend_selectdmode = 'single',点击不同的图例就可以显示了,如下:

style_geolines = style.add(is_label_show=True,
           line_curve=0.3,       
           line_opacity=0.6,      
           geo_effect_symbol='plane', 
           geo_effect_symbolsize=10,  
           geo_effect_color='#7FFFD4',
           geo_effect_traillength=0.1,
           label_color=['#FFA500', '#FFF68F'],
           border_color='#97FFFF', 
           geo_normal_color='#36648B', 
           label_formatter="{b}", 
           is_legend_show=True,
           legend_pos = 'left',
           legend_selectdmode = 'single')  #单例模式
geolines.add('从东莞出发',     #图例1名称
       plotting_data,
       maptype='china',  
       geo_cities_coords=geo_cities_coords,
       **style_geolines)
geolines.add('回到东莞',      #图例2名称
       [('海口','东莞'),('拉萨','东莞'),('贵州','东莞'),('兰州','东莞')],
       maptype='china', 
       geo_cities_coords=geo_cities_coords,
       **style_geolines)

pyecharts动态轨迹图的实现示例

到此这篇关于pyecharts动态轨迹图的实现示例的文章就介绍到这了,更多相关pyecharts动态轨迹图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
tensorflow 查看梯度方式
Feb 04 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Python下划线5种含义代码实例解析
Jul 10 Python
Python 如何定义匿名或内联函数
Aug 01 Python
Python爬取网页信息的示例
Sep 24 Python
python math模块的基本使用教程
Jan 16 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 #Python
Python openpyxl 插入折线图实例
Apr 17 #Python
python 画图 图例自由定义方式
Apr 17 #Python
关于python 的legend图例,参数使用说明
Apr 17 #Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 #Python
python matplotlib实现将图例放在图外
Apr 17 #Python
python 比较字典value的最大值的几种方法
Apr 17 #Python
You might like
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
python中map()与zip()操作方法
2016/02/27 Python
Python+Opencv识别两张相似图片
2020/03/23 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
机关作风建设工作总结
2014/10/23 职场文书
小学四年级学生评语
2014/12/26 职场文书
李强感恩观后感
2015/06/17 职场文书
python基础之匿名函数详解
2021/04/21 Python
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
PyQt5实现多张图片显示并滚动
2021/06/11 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android