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

yizhihongxing

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

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

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

 

本项目的完整结构如下:

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

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

北京:

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

上海:

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

天津:

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

河北:

  • 保定市
  • 廊坊市

山东:

  • 烟台市
  • 青岛市

江苏:

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

浙江:

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

江西:

  • 南昌市
  • 九江市

安徽:

  • 黄山市

湖北:

  • 武汉市

湖南:

  • 长沙市

海南:

  • 海口市
  • 三亚市

四川:

  • 成都市

广东:

  • 湛江市

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

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/5/31 9:21 上午
# 绘制个人足迹地图:全国范围
# 完整源码加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中的下面一行:

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

 

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

margin:auto;top:30px

 

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

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

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

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/5/31 10:01 上午
# 绘制个人足迹地图:省市范围
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进行修改,保证图片居中。我们在这里只展示三个省市的情况:

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

在这里插入图片描述

最后一步,也是最为关键的一步,就是我们要打通全国足迹地图和每个省市足迹地图的联系,也就是说,我们点击全国足迹地图上去过的省份,那么可以点击进去查看该省市下的足迹地图情况,比如说去过哪些市。
  对此,我们修改生成的全国.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

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python制作炫酷的个人足迹地图 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 两行Python代码实现自动打开百度并输入搜索词,超简单

    在群里面最常见的一句话就是,本群已和百度达成深度合作,有问题直接找百度即可! 好家伙~ 那我们今天就来试试,用Python自动打开百度找答案! 涉及知识点 基础语法 路由跳转 http 状态码 代码展示 首先导入咱们需要使用的模块 import platform import webbrowser # 我给大家准备了这些资料:Python视频教程、100本P…

    Python开发 2023年4月2日
    00
  • Python:如何只用十几行代码写一个程序?

    Python可以做的事情真的太多了,常见的网站开发,软件开发,爬虫,数据分析,人工智能,机器学习,量化投资,自动化办公,自动化运维,游戏开发,脚本制作,树莓派等等等等~ 今天咱们就来试试用Python做一个简单的程序,只需要十几行代码即可,灰常简单~     知识点 PyQt6 sys   代码展示 #引入类 # 更多好玩的代码 都放在这个群啦 279199…

    2023年4月2日
    00
  • Python骚操作!实现自动制作各种证件照,这不比PS快多了!

    事情是这样的 晚上我正在聚精会神写代码(打游戏~) 突然,收到学妹给我发来的消息 还有一张自拍照 而且是可以放在结婚证上的那种哦 就是 之前帮过她几次忙 难道要以身相许 去一起办证 原来是照片尺寸不合适 让我帮她修图。还要什么蓝底、红底各种背景的 虽然有些失落 还是,默默的撸出了我39米长的python大刀 先上效果 1、尺寸长宽调整为:295×413 2、…

    Python开发 2023年4月2日
    00
  • Python生成字母对后写入文件

    一、人生苦短,我用Python 1、案例背景 生成字母对并写入文件,并将结果写入文件中。 文件中每行为: ab cd ef gh 2、主要知识点 文件读写 基础语法 zip 函数 字符串步长截取 3、素材 二、代码展示 创建一个py文件夹 咱们先导入需要用的模块 import platform import string # 我给大家准备了这些资料:Pyth…

    Python开发 2023年4月2日
    00
  • Python做一个英汉翻译小字典

    每天一句小诗词 阳明四句:无善无恶心之体,有善有恶意之动,知善知恶是良知,为善去恶是格物。 今天教大家用Python做一个英汉翻译小字典,输入英文,返回对应中文。 二、知识点 文件读写 基础语法 异常处理 循环语句 字符串处理 三、代码展示 导入模块 import platform # 我还给大家准备了这些资料:Python视频教程、100本Python电子…

    Python开发 2023年4月2日
    00
  • 用Python做一个中秋抢购月饼的脚本

    序言 每逢佳节倍思亲,想买个东西给家里,结果发现手速不够,网速不够快,没有时间下单等等各种原因导致最后想买的东西售罄了… 甚至跟你一起抢购的可能是脚本,太真实了! 今天就给大家分享一个python版抢购月饼的脚本,我们要用魔法打败魔法!话不多说,直接开搞! 准备工作 今天要用的是一个测试工具的库:Selenium Selenium是一个用于测试网站的自动化测…

    Python开发 2023年4月2日
    00
  • QQ发生大规模账号泄露事件,二十行Python代码,带你了解前因后果

    六月,秋秋发生大规模盗号事件,众说纷纭,也有说因为某习通买卖个人信息导致的,有说是因为点了图片中的网站导致中毒被盗的,还有说企鹅数据库被攻击导致账号被盗的,反正公说公有理婆说婆有理。     但是吧,人呐,一般都喜欢凑热闹,于是乎,我直接用Python把围脖爬了一遍,看他们争论的不亦乐乎,我开心极了~       兄弟们学习python,有时候不知道怎么学,…

    2023年4月2日
    00
  • 利用Python快速实现一个线程池,非常简单

    雷猴啊,兄弟们!今天来展示一下如何用Python快速实现一个线程池。   一、序言 当有多个 IO 密集型的任务要被处理时,我们自然而然会想到多线程。但如果任务非常多,我们不可能每一个任务都启动一个线程去处理,这个时候最好的办法就是实现一个线程池,至于池子里面的线程数量可以根据业务场景进行设置。 比如我们实现一个有 10 个线程的线程池,这样可以并发地处理 …

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部