0 前言

5月是美国的毕业季,我家领导也即将毕业了,我们将在美国进行为期两周的毕业旅行。其实类似这样的航线图我以前也用PPT绘制过,给领导用于发朋友圈,虽然总体能表达出意思,但是效果不能让自己满意,见下图。

最近趁着研究python的数据可视化,顺便绘制了这张更显炫酷一些的星空主题航线图。

接下来我将介绍如何用python绘制这样一张星空航线图,以下是本文的思维导图。

1 plotly平台

plotly(https://plot.ly/)是我们本次绘图使用的平台,它是一个用于做数据分析和可视化的在线平台,在本地运行python程序后,将在该网站你的账户中找到对应的项目,获取生成的图片。这个平台的优点是免费,图的种类很齐全,使用还算方便,而且部分图表在制作过程中可以交互操作数据。缺点是说明文档不清晰,或者说没有完全开源,只是给出一些简单用法,在编程细节方面缺失了蛮多。总得来说,我认为它是非常好用的一个数据可视化工具。

1.1 注册账户

在使用前首先要注册一个账户,在你的python程序中,需要定义用户名和APIkey才能正常使用。

1.2 API-Key获取

注册完成登录后,再右上角的setting中,进入个人账户,左边点API Keys,右边点Regenerate Key,会显示你的API Key。我们是免费版用户,每个API Key,每天有100次向平台传输数据的机会,也就是我们的python程序可以run100次。

1.3 安装Plotly

首先要在你的电脑上安装它,使用下面这行代码:

然后在你的python程序最上面,导入包的时候,记得加上下面这行代码,定义你的用户名和APIKey,否则会报错:

接着,可以用一段简单的绘图程序试一下有没有安装成功:

运行后,如果没有报错,就说明安装成功了,信息栏会提示你去一个网站(网站地址其实就是刚才登录的那个地方)上访问生成的project,点进去就能看到生成的图以及相关数据。

2 数据准备

一共需要准备这些数据:美国13510城市的经纬度,旅行所到达的航站楼或是关键地点的经纬度,航班每段路线的起点与终点的经纬度。数据读取csv文件,csv格式很简单,可以用文本文档去打开,第一行是对应的项目名称,用逗号间隔,从第二行开始就是相应的每条数据,也用逗号间隔。文档名称保存成csv后缀即可。

美国13510个城市的坐标其实是为了模拟星空的感觉,密集的地区也代表了相对比较繁华。这个数据我是在CSDN上找到的,然后经过处理保存成csv格式。这个文档我们只需要每个城市的纬度与经度,即lat和lon,如下所示:

航站楼数据由于我们旅行的地点也不会很多,所以可以自行查经纬度自己做一个数据文件,如下所示:

航班线路也同理,需要起点经纬度和终点经纬度:

到这里我们就得到了这三个数据文件:

3 航线图绘制

接下来就是用python编写具体代码来绘制航线图。代码的主要逻辑如下,共分为五个部门。

3.1 导入包

导入plotly包中部分使用到的工具,导入pandas包用于数据读取,同时不要忘记设置api_key。

3.2 数据读取

路径根据三个数据文件所在位置进行设置。

3.3 单元设置

plotly绘图,其实就是你把每个你需要表达的单元单独写出来,最后在布局图纸上进行叠加,用列表来存储每个绘图单元,单元内的每个数据又是使用字典dict来存储。

13510城市点绘制,我们选择类型是地图散点图,从数据中读取绘制位置的经纬度。mode表示你要把什么内容画出来,这里设置"markers"的含义是在这个坐标上绘制一个圆。size表示大小,color用rgb数值表示颜色,opacity是透明度。

航站楼绘制,其实跟城市点绘制是同理的。我们为了美观,在每个点绘制了两个同心圆,调整了尺寸、颜色及透明度。

航线绘制,首先定义一个空列表,用于后面扩充。遍历每条数据,读取起点终点的经纬度,mode选择"lines"的含义是在这两个坐标间生成曲线。

3.4 布局设置

布局设置就是你绘制的这些单元是在怎样的一张底图上进行的,这里我们可以选择世界地图,或者是某一个区域(比如北美洲),再或者某个国家,比如接下来我们需要选择美国。然后进行相应的参数设定。

首先是标题设置以及是否显示图例,这里我们不需要图例所以选择False。geo里的内容就是我们这次的底图,项目类型是"albers usa",表示美国地图(albers投影)。resolution是分辨率,默认选择50即可。下面为了模拟星空的感觉,我们把湖lake的颜色跟背景background的颜色设置成相同;将陆land的颜色和洲际分界线subunit的颜色设置成相同。横轴和纵轴的设置主要调整一下显示范围,另外不需要显示网格。

3.5 绘制

最后我们创建一个fig,将设置好的单元赋值给data,将设置好的布局赋值给layout,用py.iplot方法即可完成绘制。

4 美化

绘制过程结束后,才是最重要的步骤——美化。刚画好的时候,我用的是红色航线搭配绿色陆地以及白色背景,效果如下图。

4.1 颜色

首先要做的是选择颜色,让整体效果看上去像星空一些,上面的代码是已经调试好的结果,其实这个过程也是挺漫长的。我一直以来做PPT选择颜色都使用的一个方法——日本颜色辞典,截取部分如下图所示。在Reference里我有挂出网址。其实也不是太好的方法,如果有伙伴有更好的主意可以私我。

星空里星星肯定是白色的,底色用近似铁绀色的蓝(更深一点),然后陆地用近似琉璃色(更深一点),航线用近似空色。近似的意思就是rgb值在这附近微调。

4.2 文字

其实用python写代码是可以直接完成标注,但是字体实在是太丑,所以我没有这样选择。

这里的文字我是在PPT里后期添加的,使用的英文字体是ADELE(需要自己下载,reference有给出地址),ADELE字体,字体纤细饱满,很有视觉效果。

上面的地点为了突出,使用了白色填充,蓝色发光效果。

然后在最下面加上图片的标题,整个图就大功告成了。

5 总结

本文介绍了使用plotly for python绘制星空主题旅游线路图的详细过程,包括plotly平台的基本使用方法,具体绘制代码解读以及后期的美化工作。图片的效果我跟我家领导还是都挺满意的(到时候朋友圈肯定会再见),后续又制作了一张新的排版用于桌面背景。

Reference(右滑查看)

用python画星空的代码简单-【Python】手把手教你绘制星空旅游线路图相关推荐

  1. 用python画月亮的代码-用python画月亮的代码是什么?

    用python画月亮的代码是什么? 用python画月亮的代码是import turtle as t t.screensize(800,600,"#483d8b")#画布尺寸和颜色 ...

  2. 用python画星空-【Python】手把手教你绘制星空旅游线路图

    0 前言 5月是美国的毕业季,我家领导也即将毕业了,我们将在美国进行为期两周的毕业旅行.其实类似这样的航线图我以前也用PPT绘制过,给领导用于发朋友圈,虽然总体能表达出意思,但是效果不能让自己满意,见 ...

  3. python画折线图代码-用Python画论文折线图、曲线图?几个代码模板轻松搞定!

    前言 这几天在搞论文图,唉说实话抠图这种东西真能逼死人.坐在电脑前抠上一天越看越丑,最后把自己丑哭了-- 到了画折线图分析的时候,在想用哪些工具的时候.首先否决了excel,读书人的事,怎么能用exc ...

  4. 用python画月亮的代码-用Python画一个超级月亮

    信息安全公益宣传,信息安全知识启蒙. 教程列表见微信公众号底部菜单 农历腊月十五 凌晨三点的街上 程序员给巡警解释 "同志,您误会了,我不是小偷,我是程序员." 于此同时 程序员错 ...

  5. 用python画月亮的代码-用 Python 画一个超级月亮

    信息安全公益宣传,信息安全知识启蒙. 教程列表见微信公众号底部菜单 农历腊月十五 凌晨三点的街上 程序员给巡警解释 "同志,您误会了,我不是小偷,我是程序员." 于此同时 程序员错 ...

  6. 用python画皮卡丘代码-用python画一只可爱的皮卡丘实例

    效果图 #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): ...

  7. 用python画皇冠_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码

    最近给大家整理了一下,挑了一些我觉得不错的代码分享给大家手把手教你如何用Python画一棵漂亮樱花树含源码. 动态生成樱花 效果图(这个是动态的): import turtle as T import ...

  8. 如何用python画圆形的代码-简单实现python画圆功能

    本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下 import numpy as np import matplotlib.pyplot as plt from mat ...

  9. 用python画皮卡丘代码-利用Python绘制萌萌哒的皮卡丘

    开发工具 Python版本:3.6.4 相关模块: turtle模块. 环境搭建 安装Python并添加到环境变量即可. 在cmd窗口运行"pikachu.py"文件即可. 效果如 ...

最新文章

  1. Google与Binomial合作开源Basis Universal GPU纹理编解码器
  2. Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
  3. agv系统介绍_重载AGV小车主要结构及导航原理是什么?
  4. 在8080端口输出php的输出,端口8080上的PHP错误
  5. 7_less中引入其他文件 / 模块
  6. 500万相机芯片尺寸_MGS二代系列500万像素新品面世
  7. 田永强:优秀的JavaScript模块是怎样炼成的
  8. 计算机主机安装,解决方案:说明的计算机主机安装过程_IT /计算机_信息
  9. 怎样学好python编程-Python编程怎么学习好?老男孩Python入门
  10. ftl if else判断_为什么都不用 switch 而使用 if/ else 来做条件判断?
  11. 质疑北京大北农科技集团股份有限公司(”大北农“)停牌公告
  12. 【PATL2-002】链表去重(链表模拟)---水题
  13. IOS版添加phonegap--美洽客服插件教程
  14. [渝粤教育] 晋中学院 晋商大院三雕艺术 参考 资料
  15. 共享服务中心建设原则
  16. JZOJ5442【NOIP2017提高A组冲刺11.1】荒诞 三进制状压+欧拉序
  17. mysql远程连接3306不通问题
  18. 福利来了 | 开发者社区布道师计划,奖品丰厚
  19. KF、EKF、ESKF的区别与联系
  20. FPGA中ROM IP与RAM IP核配置与调用

热门文章

  1. java面试所问到的问题和资料整理
  2. XP系统谷歌浏览器一直提示“adobe flash player 因过期而遭阻止”解决方法
  3. 单位dB(分贝)的含义和好处,dBm(dBmW 分贝毫瓦)的含义 dB的含义
  4. Android获取QQ名片赞数量,教你如何提高QQ名片赞数量 如何增加QQ赞数量
  5. linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
  6. zabbix php微信报警,Zabbix实现微信报警
  7. “三高“Mysql - Mysql备份概览
  8. 学生信息管理系统 C++实现
  9. DAMO-YOLO第三方数据训练教程
  10. Android 获取世界时区