Python制作炫酷的个人足迹地图

用Python来绘制自己的个人足迹地图, 精确到市级别。

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

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

本项目的完整结构如下:

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

北京:

  • 延庆区
  • 昌平区
  • 海淀区
  • 东城区
  • 西城区
  • 大兴区
  • 朝阳区

上海:

  • 嘉定区
  • 青浦区
  • 松江区
  • 宝山区
  • 闵行区
  • 奉贤区
  • 浦东新区
  • 崇明区
  • 徐汇区
  • 黄浦区
  • 静安区
  • 杨浦区
  • 虹口区
  • 金山区
  • 长宁区
  • 普陀区

天津:

  • 滨海新区
  • 南开区
  • 河西区
  • 和平区

河北:

  • 保定市
  • 廊坊市

山东:

  • 烟台市
  • 青岛市

江苏:

  • 南京市
  • 苏州市
  • 扬州市
  • 镇江市
  • 无锡市

浙江:

  • 杭州市
  • 绍兴市
  • 宁波市
  • 舟山市
  • 湖州市
  • 嘉兴市
  • 台州市
  • 金华市

江西:

  • 南昌市
  • 九江市

安徽:

  • 黄山市

湖北:

  • 武汉市

湖南:

  • 长沙市

海南:

  • 海口市
  • 三亚市

四川:

  • 成都市

广东:

  • 湛江市

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

-*- coding: utf-8 -*-
author: Jclian91
place: Pudong Shanghai
time: 2020/5/31 9:21 上午
绘制个人足迹:全国范围内<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Mapping personal footprints: nationwide</font>*</details>
完整源码加Q群:279199867
import yaml
from pyecharts.charts import Map
from 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中的下面一行:

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

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

margin:auto;top:30px

全国足迹图的效果如下:

[En]

The effect of the national footprint map is as follows:

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

-*- coding: utf-8 -*-
author: Jclian91
place: Pudong Shanghai
time: 2020/5/31 10:01 上午
绘制个人足迹图:省市范围<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Draw a personal footprint map: the scope of provinces and cities</font>*</details>
import yaml
from pyecharts.charts import Map
from 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进行修改,保证图片居中。我们在这里只展示三个省市的情况:

最后一步,也是最关键的一步,我们需要将全国足迹地图与每个省市足迹地图连接起来,也就是说,我们在全国足迹地图上点击我们去过的省份。然后你可以点击查看省市的足迹地图,比如你去过哪些城市。

[En]

The last step, and the most critical step, is that we need to connect the national footprint map with each provincial and municipal footprint map, that is to say, we click on the provinces we have been to on the national footprint map. then you can click in to view the footprint map of the province and city, such as which cities you have been to.

对此,我们修改生成的全国.html文件,假设该地图的图像句柄为chart_a438407081634ceab6af1c965034ae16,那么在最后的

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;
                }

        }
  });

我特意制作了个人足迹地图的视频:https://live.csdn.net/v/229255

Original: https://www.cnblogs.com/hahaa/p/16550554.html
Author: 轻松学Python
Title: Python制作炫酷的个人足迹地图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/498887/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python scrapy 代理中间件,爬虫必掌握的内容之一

    本篇博客为大家说明一下 scrapy 中代理相关知识点。 代理的使用场景 编写爬虫代码的程序员,永远绕不开就是使用代理,在编码过程中,你会碰到如下情形: 网络不好,需要代理; 目标…

    Python 2023年10月1日
    034
  • docker+gitlab+jenkins+pytest+allure实现devops接口自动化

    简介:此框架设计的思路是基于docker搭建jenkins+gitlab环境,集成python+pytest+gitlab+jenkins+allure实现自动化持续集成测试,最终…

    Python 2023年9月11日
    063
  • scrapy splash在ubuntu环境下的简单使用

    标题## scrapy splash在ubuntu环境下的简单使用: 做爬虫的朋友经常会遇到一些动态加载的网站,比较常见的做法是使用selenium调用一个浏览器来加载,但是这种方…

    Python 2023年10月3日
    047
  • Python返回数组中指定行列最大值的索引Numpy.argmax()方法

    【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ● 标题与摘要 Python返回数组中指定行列最大值的索引 Num…

    Python 2023年8月24日
    058
  • Go | 函数(包)的使用

    本文通过一个实现加减乘除运算的小程序来介绍go函数的使用,以及使用函数的注意事项,并引出了对包的了解和使用。 实现加减乘除运算 传统方法实现: var n1 float64 = 1…

    Python 2023年10月15日
    044
  • Pandas 中df.loc[ ] 与 df.iloc[ ] 的用法与异同详解

    官网资料: loc :https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc…

    Python 2023年8月17日
    064
  • linux一切皆文件之tty字符设备(深入理解sshd创建pty的过程) (五)

    一、知识准备 1、在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列)2、操作这些不同的类型就像操作文件一样,比如增删改…

    Python 2023年6月10日
    075
  • 深入解析kubernetes controller-runtime

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Python 2023年6月3日
    054
  • ChatGPT:新晋CV工程师

    在短短的两个星期内,ChatGPT 迅速成为公众聊天的焦点。超过一百万的人与OpenAI的新聊天机器人”交谈”,让它写诗和大学论文,生成创意食谱,创建虚拟机…

    Python 2023年11月4日
    060
  • 爬虫中scrapy模拟登录

    每日分享: 有人三分钟泡面,有人三小时煲汤;有人的外卖已送达,而有人才刚切好菜。当你选好了你要的方式,坚定下去,别胡思乱想;我们要走的路不一样,花期也不一样,不必焦虑。 目标: 应…

    Python 2023年10月2日
    059
  • Windows系统安装jenkins服务 war包形式

    1.首先下载 jenkins war包 注意和jdk 的版本匹配https://www.jenkins.io/zh/download/ 2.配置jenkins环境变量 如果不配置环…

    Python 2023年11月8日
    041
  • Android网络请求(2)

    Android网络请求(2) 在android网络开发中,除get请求外常见的还有post、put、delete这三种,接下来我们将详细讲解这三种请求及参数 GET请求 我们使用过…

    Python 2023年10月14日
    043
  • PyTorch中张量的创建和常用方法

    张量(Tensor)对象是我们在实际使用PyTorch的过程中操作的基本数据类型。PyTorch中定义了适用深度学习的基本数据结构——张量,以及张量的各类计算。其实也相当于NumP…

    Python 2023年8月29日
    051
  • python (模块)Pandas DataFrame

    DataFrame:一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组…

    Python 2023年8月21日
    047
  • Python:用NetworkX生成并绘制(带权)无向图

    NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用。 1. 随机图生成 G = nx.erdos_renyi_gra…

    Python 2023年10月28日
    037
  • Pytest框架运行方式(主函数、命令行、配置、执行顺序)

    一、pytest单元测试框架 二、单元测试框架和自动化测试框架有什么关系? 三、pytest简介 四、使用pytest,默认的测试用例的规则以及基础应用 五、pytest测试用例的…

    Python 2023年9月13日
    034
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球