用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(右滑查看)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值