前两年,足迹地图小程序风靡朋友圈,一时间大家都流行晒自己的旅行地图。但是,笔者最近体验了好几款足迹地图的小程序,发现这些小程序虽然号称是足迹地图,但最多只是展示到省级别,无法精确到市级别,因此,笔者周末花了点时间,用Python来绘制自己的个人足迹地图,可以精确到市级别。

下面的部分,笔者将介绍如何简单地来绘制个人足迹地图。

首先我们需要安装以下Python的第三方模块:

echarts-china-cities-pypkg==0.0.9      echarts-china-provinces-pypkg==0.0.3      pyecharts==1.6.2PyYAML==5.3.1 

本项目的完整结构如下:

完整的项目结构

我们在项目中采用YAML文件来配置自己旅行过的省以及省下面的市,笔者的配置文件如下:

北京:  - 延庆区  - 昌平区  - 海淀区  - 东城区  - 西城区  - 大兴区  - 朝阳区上海:  - 嘉定区  - 青浦区  - 松江区  - 宝山区  - 闵行区  - 奉贤区  - 浦东新区  - 崇明区  - 徐汇区  - 黄浦区  - 静安区  - 杨浦区  - 虹口区  - 金山区  - 长宁区  - 普陀区天津:  - 滨海新区  - 南开区  - 河西区  - 和平区河北:  - 保定市  - 廊坊市山东:  - 烟台市  - 青岛市江苏:  - 南京市  - 苏州市  - 扬州市  - 镇江市  - 无锡市浙江:  - 杭州市  - 绍兴市  - 宁波市  - 舟山市  - 湖州市  - 嘉兴市  - 台州市  - 金华市江西:  - 南昌市  - 九江市安徽:  - 黄山市湖北:  - 武汉市湖南:  - 长沙市海南:  - 海口市  - 三亚市四川:  - 成都市广东:  - 湛江市

接着我们利用Python脚本来生成足迹地图。先是全国地图,用于显示省和直辖市的情况,china_map.py的代码如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Pudong Shanghai# time: 2020/5/31 9:21 上午# 绘制个人足迹地图:全国范围import yamlfrom pyecharts.charts import Mapfrom pyecharts import options as opts# 省和直辖市with open("travel_config.yml", 'r', encoding='utf-8') as ymlfile:    province_city_dict = yaml.safe_load(ymlfile)province_dict = dict(zip(province_city_dict.keys(), [1]*len(province_city_dict.keys())))print(province_dict)# maptype='china' 只显示全国直辖市和省级map = Map(init_opts=opts.InitOpts(width='1200px', height='800px'))map.set_global_opts(    title_opts=opts.TitleOpts(title="个人足迹地图"),    visualmap_opts=opts.VisualMapOpts(max_=1, is_piecewise=True,                                      pieces=[                                        {"max": 1, "min": 1, "label": "去过", "color": "#4EA397"},                                        {"max": 0, "min": 0, "label": "未去过", "color": "#FFFFFF"},                                        ])  #最大数据范围,分段                                     )map.add("个人足迹地图", data_pair=province_dict.items(), maptype="china", is_roam=True)map.render('全国.html')

运行上述脚本,会生成全国.html。为了保证图片居中显示,我们对该HTML中的下面一行:

<div id="a438407081634ceab6af1c965034ae16" class="chart-container" style="width:1200px; height:800px;"></div>

的样式(style)增加如下内容:

margin:auto;top:30px

全国范围的足迹地图效果图如下:

个人足迹地图——全国

接着,我们来生成每个省市的足迹地图,利用province_map.py脚本,代码如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Pudong Shanghai# time: 2020/5/31 10:01 上午# 绘制个人足迹地图:省市范围import yamlfrom pyecharts.charts import Mapfrom pyecharts import options as opts# 省和直辖市下面的市with open("travel_config.yml", 'r', encoding='utf-8') as ymlfile:    province_city_dict = yaml.safe_load(ymlfile)for province, cities in province_city_dict.items():    map = Map(init_opts=opts.InitOpts(width='1200px', height='800px'))    map.set_global_opts(        title_opts=opts.TitleOpts(title="个人足迹地图-%s" % province),        visualmap_opts=opts.VisualMapOpts(max_=1, is_piecewise=True,                                          pieces=[                                            {"max": 1, "min": 1, "label": "去过", "color": "#4EA397"},                                            {"max": 0, "min": 0, "label": "未去过", "color": "#FFFFFF"},                                            ])  #最大数据范围,分段                                         )    city_dict = dict(zip(cities, [1]*len(cities)))    map.add("个人足迹地图-%s" % province, data_pair=city_dict.items(), maptype=province, is_roam=True)    map.render('./provinces/%s.html' % province)    print("生成个人足迹地图-%s 成功" % province)

这时,会在provinces目录下生成每个省或者直辖市的足迹地图,我们分别对每个HTML进行修改,保证图片居中。我们在这里只展示三个省市的情况:

个人足迹地区——海南

个人足迹地图——江苏

个人足迹地图——浙江

最后一步,也是最为关键的一步,就是我们要打通全国足迹地图和每个省市足迹地图的联系,也就是说,我们点击全国足迹地图上去过的省份,那么可以点击进去查看该省市下的足迹地图情况,比如说去过哪些市。

对此,我们修改生成的全国.html文件,假设该地图的图像句柄为chart_a438407081634ceab6af1c965034ae16,那么在最后的<script>对中添加内容如下:(确保点击去过的省份,可以查看该省市的足迹地图)

        chart_a438407081634ceab6af1c965034ae16.on('click', function (param){            var selected = param.name;                if (selected) {                    switch(selected){                        case '北京':                            location.href = "provinces/北京.html";                            break;                        case '上海':                            location.href = "provinces/上海.html";                            break;                        case '天津':                            location.href = "provinces/天津.html";                            break;                        case '四川':                            location.href = "provinces/四川.html";                            break;                        case '安徽':                            location.href = "provinces/安徽.html";                            break;                        case '山东':                            location.href = "provinces/山东.html";                            break;                        case '江苏':                            location.href = "provinces/江苏.html";                            break;                        case '江西':                            location.href = "provinces/江西.html";                            break;                        case '河北':                            location.href = "provinces/河北.html";                            break;                        case '浙江':                            location.href = "provinces/浙江.html";                            break;                        case '海南':                            location.href = "provinces/海南.html";                            break;                        case '湖北':                            location.href = "provinces/湖北.html";                            break;                        case '湖南':                            location.href = "provinces/湖南.html";                            break;                        case '广东':                            location.href = "provinces/广东.html";                            break;                        default:                            break;                    }            }      });

笔者特意制作了个人足迹地图的视频:

本项目已经开源至Github,网址为:

源码获取私信小编01!

Python实战:200行代码绘制个人足迹地图!相关推荐

  1. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  2. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  3. Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋

    Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋 写在前面 需要用到的工具包和参考 游戏设定 初始化 切换下棋方 判断五子连珠(核心) 鼠标点击流程事件 成品展示 打 ...

  4. python画五角星代码_Python如何使用27行代码绘制星星图

    Python如何使用27行代码绘制星星图,代码,如何使用,星星,满天星,效果 Python如何使用27行代码绘制星星图 易采站长站,站长之家为您整理了Python如何使用27行代码绘制星星图的相关内容 ...

  5. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  6. 宁愿“大小周”、每天只写 200 行代码、月薪 8k-17k 人群再涨!揭晓中国开发者真实现状...

    作者 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 程序员,一个圈外人羡慕.圈内人喊苦的"神奇"职业--高薪.福利好是旁人羡慕的理由,高压.加班多却也是他们最常见的写照 ...

  7. JavaScript开发区块链只需200行代码

    JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...

  8. 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  9. python绘制简单城市剪影图_Python之绘制个人足迹地图

    前两年,足迹地图小程序风靡朋友圈,一时间大家都流行晒自己的旅行地图.但是,笔者最近体验了好几款足迹地图的小程序,发现这些小程序虽然号称是足迹地图,但最多只是展示到省级别,无法精确到市级别,因此,笔者周 ...

最新文章

  1. Docker桌面不再对企业用户免费,每月订阅费最高21美元,用户直接炸锅了
  2. 网页开发——从接触到编写输出一个DIV
  3. boost::pointer_traits用法实例
  4. Winform可读取html语言,C# Winform 用WebBrowser实现 Html 编辑功能
  5. (41)System Verilog 例化System Verilog模块
  6. 软考路:2021年系统架构设计师之流水账
  7. AndroidStudio_安卓原生开发_自己设计android端_到springboot端的请求验证Token系统---Android原生开发工作笔记158
  8. ELK(ElasticSearch, Logstash, Kibana)实时日志分析平台部署
  9. 调用微信API获取小程序URL Link
  10. matlab newton插值,(最新整理)Newton插值法
  11. 使用bootstrap图片上传插件(fileInput)springmvc实现图片上传全流程
  12. 未知USB设备(设备描述符请求失败)终于解决。网上查到的所有方法我都试过了,全部失败。我的成功方法就是调整“电源选项”
  13. 达人评测 r7 7840HS和i5 1340p选哪个 锐龙r77840HS和酷睿i51340p对比
  14. Hadoop LZO压缩配置
  15. 完美的Python代码制作“恐龙跳一跳“小游戏【附带源码 】
  16. 《Web安全之机器学习入门》一 3.2 数据集
  17. 各大编程语言、软件,电子电路刷题学习网站链接及微信公众号
  18. 通过朋友网信息查找QQ号~
  19. 刨根问底:Kafka 到底会不会丢数据?
  20. android4.1不支持微信,华为EMUI 4.1(android6.0)手机能否安装微信小程序?

热门文章

  1. 易车、毛豆新车、蛋蛋订车买车到底靠谱吗?
  2. MGRE GRE PPP协议综合运用
  3. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优
  4. LED大屏千兆光纤收发器利亚德洲明LED显示屏诺瓦灵星雨卡莱特凯视达光电转换器
  5. linux清理进程内存,linux 内存使用管理及释放
  6. 全球首个5G全覆盖国家诞生,华为成幕后最大功臣!
  7. 人类\经济\太阳,管他呢
  8. 花更少的钱住更大的房子,中国都市青年的租房爱与恨
  9. eSIM卡技术的标准化进展
  10. 电容屏与电阻屏的区别