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的线程来解决生产者消费问题的示例
Apr 02 Python
python如何查看系统网络流量的信息
Sep 12 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
Python实现的求解最小公倍数算法示例
May 03 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
python实现控制台打印的方法
Jan 12 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
如何验证python安装成功
Jul 06 Python
python自动化办公操作PPT的实现
Feb 05 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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微信开发之查询微信精选文章
2016/06/23 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
全面了解javascript三元运算符
2016/06/27 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python八皇后问题的解决方法
2018/09/27 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python查看模块,对象的函数方法
2018/10/16 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
招商专员岗位职责
2014/02/08 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
汉语拼音教学反思
2016/02/22 职场文书