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采集博客中上传的QQ截图文件
Jul 18 Python
详解C++编程中一元运算符的重载
Jan 19 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
django query模块
Apr 20 Python
Python 下载及安装详细步骤
Nov 04 Python
python实现连连看游戏
Feb 14 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
简单了解如何封装自己的Python包
Jul 08 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
如何利用Python 进行边缘检测
Oct 14 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 文件状态缓存带来的问题
2008/12/14 PHP
服务器web工具 php环境下
2010/12/29 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
python numpy 反转 reverse示例
2019/12/04 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
自荐信怎么写好
2013/11/11 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
活动总结报告怎么写
2014/07/03 职场文书
单位作风建设自查报告
2014/10/23 职场文书
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android