用python画星空的代码简单-【Python】手把手教你绘制星空旅游线路图
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】手把手教你绘制星空旅游线路图相关推荐
- 用python画月亮的代码-用python画月亮的代码是什么?
用python画月亮的代码是什么? 用python画月亮的代码是import turtle as t t.screensize(800,600,"#483d8b")#画布尺寸和颜色 ...
- 用python画星空-【Python】手把手教你绘制星空旅游线路图
0 前言 5月是美国的毕业季,我家领导也即将毕业了,我们将在美国进行为期两周的毕业旅行.其实类似这样的航线图我以前也用PPT绘制过,给领导用于发朋友圈,虽然总体能表达出意思,但是效果不能让自己满意,见 ...
- python画折线图代码-用Python画论文折线图、曲线图?几个代码模板轻松搞定!
前言 这几天在搞论文图,唉说实话抠图这种东西真能逼死人.坐在电脑前抠上一天越看越丑,最后把自己丑哭了-- 到了画折线图分析的时候,在想用哪些工具的时候.首先否决了excel,读书人的事,怎么能用exc ...
- 用python画月亮的代码-用Python画一个超级月亮
信息安全公益宣传,信息安全知识启蒙. 教程列表见微信公众号底部菜单 农历腊月十五 凌晨三点的街上 程序员给巡警解释 "同志,您误会了,我不是小偷,我是程序员." 于此同时 程序员错 ...
- 用python画月亮的代码-用 Python 画一个超级月亮
信息安全公益宣传,信息安全知识启蒙. 教程列表见微信公众号底部菜单 农历腊月十五 凌晨三点的街上 程序员给巡警解释 "同志,您误会了,我不是小偷,我是程序员." 于此同时 程序员错 ...
- 用python画皮卡丘代码-用python画一只可爱的皮卡丘实例
效果图 #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): ...
- 用python画皇冠_【推荐】手把手教你如何用Python画一棵漂亮樱花树含源码
最近给大家整理了一下,挑了一些我觉得不错的代码分享给大家手把手教你如何用Python画一棵漂亮樱花树含源码. 动态生成樱花 效果图(这个是动态的): import turtle as T import ...
- 如何用python画圆形的代码-简单实现python画圆功能
本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下 import numpy as np import matplotlib.pyplot as plt from mat ...
- 用python画皮卡丘代码-利用Python绘制萌萌哒的皮卡丘
开发工具 Python版本:3.6.4 相关模块: turtle模块. 环境搭建 安装Python并添加到环境变量即可. 在cmd窗口运行"pikachu.py"文件即可. 效果如 ...
最新文章
- Google与Binomial合作开源Basis Universal GPU纹理编解码器
- Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
- agv系统介绍_重载AGV小车主要结构及导航原理是什么?
- 在8080端口输出php的输出,端口8080上的PHP错误
- 7_less中引入其他文件 / 模块
- 500万相机芯片尺寸_MGS二代系列500万像素新品面世
- 田永强:优秀的JavaScript模块是怎样炼成的
- 计算机主机安装,解决方案:说明的计算机主机安装过程_IT /计算机_信息
- 怎样学好python编程-Python编程怎么学习好?老男孩Python入门
- ftl if else判断_为什么都不用 switch 而使用 if/ else 来做条件判断?
- 质疑北京大北农科技集团股份有限公司(”大北农“)停牌公告
- 【PATL2-002】链表去重(链表模拟)---水题
- IOS版添加phonegap--美洽客服插件教程
- [渝粤教育] 晋中学院 晋商大院三雕艺术 参考 资料
- 共享服务中心建设原则
- JZOJ5442【NOIP2017提高A组冲刺11.1】荒诞 三进制状压+欧拉序
- mysql远程连接3306不通问题
- 福利来了 | 开发者社区布道师计划,奖品丰厚
- KF、EKF、ESKF的区别与联系
- FPGA中ROM IP与RAM IP核配置与调用
热门文章
- java面试所问到的问题和资料整理
- XP系统谷歌浏览器一直提示“adobe flash player 因过期而遭阻止”解决方法
- 单位dB(分贝)的含义和好处,dBm(dBmW 分贝毫瓦)的含义 dB的含义
- Android获取QQ名片赞数量,教你如何提高QQ名片赞数量 如何增加QQ赞数量
- linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
- zabbix php微信报警,Zabbix实现微信报警
- “三高“Mysql - Mysql备份概览
- 学生信息管理系统 C++实现
- DAMO-YOLO第三方数据训练教程
- Android 获取世界时区