今天就带你深入体验易于使用、文档健全、功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。

“沉没成本谬误”是人们常犯的几种认知偏差之一:由于在某件事上已经投入了(“沉没”)太多的成本,即使这件事已经注定要失败,人们倾向于继续投入更多的时间和金钱。

比如,在不好的职位上待了比正常更长的时间,在一个明显不可能的项目上埋头苦干,以及(你猜的没错)继续用一个陈旧、枯燥的绘图库——matplotlib——即使已经有了更高效、更美观、可互动性更好的替代品了。

我之前一直守着 matplotlib 用的原因,就是为了我学会它复杂的语法,已经“沉没"在里面的几百个小时的时间成本。这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何“格式化日期”或“增加第二个Y轴”。

但我们现在有一个更好的选择了 —— 比如易于使用、文档健全、功能强大的开源 Python 绘图库 Plotly。今天就带你深入体验下,了解它如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。

* 本文中所有代码都已经在 Github 上开源,所有的图表都是可交互的,请使用NBViewer查看 。

(Github 源代码地址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/plotly/Plotly%20Whirlwind%20Introduction.ipynb)

(plotly 绘制的范例图表。图片来源:plot.ly)

Plotly 概述

plotly 的 Python 软件包是一个开源的代码库,它基于 plot.js,而后者基于 d3.js。我们实际使用的则是一个对 plotly 进行封装的库,名叫 cufflinks,它能让你更方便地使用 plotly 和 Pandas 数据表协同工作。

*注:Plotly 本身是一个拥有多个不同产品和开源工具集的可视化技术公司。Plotly 的 Python 库是可以免费使用的,在离线模式可以创建数量不限的图表,在线模式因为用到了 Plotly 的共享服务,只能生成并分享 25 张图表。

本文中的所有可视化图表都是在 Jupyter Notebook 中使用离线模式的 plotly + cufflinks 库完成的。在使用 pip install cufflinks plotly 完成安装后,你可以用下面这样的代码在 Jupyter 里完成导入:

单变量分布:柱状图和箱形图

单变量分析图往往是开始数据分析时的标准做法,而柱状图基本上算是单变量分布分析时必备的图表之一(虽然它还有一些不足)。

就拿博客文章点赞总数为例(原始数据见 Github:https://github.com/WillKoehrsen/Data-Analysis/tree/master/medium ),做一个简单的交互式柱状图:

(代码中的 df 是标准的 Pandas dataframe 对象)

(使用 plotly+cufflinks 创建的交互式柱状图)

对于已经习惯 matplotlib 的同学,你们只需要多打一个字母(把 .plot改成 .iplot ),就能获得看起来更加美观的交互式图表!点击图片上的元素就能显示出详细信息、随意缩放,还带有(我们接下来会提到的)高亮筛选某些部分等超棒功能。

如果你想绘制堆叠柱状图,也只需要这样:

对 pandas 数据表进行简单的处理,并生成条形图:

就像上面展示的那样,我们可以将 plotly + cufflinks 和 pandas 的能力整合在一起。比如,我们可以先用 .pivot() 进行数据透视表分析,然后再生成条形图。

比如统计不同发表渠道中,每篇文章带来的新增粉丝数:

交互式图表带来的好处是,我们可以随意探索数据、拆分子项进行分析。箱型图能提供大量的信息,但如果你看不到具体数值,你很可能会错过其中的一大部分!

散点图

散点图是大多数分析的核心内容,它能让我们看出一个变量随着时间推移的变化情况,或是两个(或多个)变量之间的关系变化情况。

时间序列分析

在现实世界中,相当部分的数据都带有时间元素。幸运的是,plotly + cufflinks 天生就带有支持时间序列可视化分析的功能。

以我在“Towards Data Science”网站上发表的文章数据为例,让我们以发布时间为索引构建一个数据集,看看文章热度的变化情况:

在上图中,我们用一行代码完成了几件事情:

  • 自动生成美观的时间序列 X 轴

  • 增加第二条 Y 轴,因为两个变量的范围并不一致

  • 把文章标题放在鼠标悬停时显示的标签中

为了显示更多数据,我们可以方便地添加文本注释:

(带有文本注释的散点图)

下面的代码中,我们将一个双变量散点图按第三个分类变量进行着色:

接下来我们要玩点复杂的:对数坐标轴。我们通过指定 plotly 的布局(layout)参数来实现这一点(关于不同的布局,请参考官方文档 https://plot.ly/python/reference/ ),同时我们把点的尺寸(size参数)和一个数值变量 read_ratio (阅读比例)绑定,数字越大,泡泡的尺寸也越大。

如果想要更复杂一些(详见 Github 的源代码),我们甚至可以在一张图里塞进 4 个变量!(然而并不推荐你们真的这么搞)

和前面一样,我们可以将 pandas 和 plotly+cufflinks 结合起来,实现许多有用的图表:

建议你查看官方文档,或者源代码,里面有更多的范例和函数实例。只需要简单的一两行代码,就可以为你的图表加上文字注释,辅助线,最佳拟合线等有用的元素,并且保持原有的各种交互式功能。

高级绘图功能

接下来,我们要详细介绍几种特殊的图表,平时你可能并不会很经常用到它们,但我保证只要你用好了它们,一定能让人刮目相看。我们要用到 plotly 的 figure_factory 模块,只需要一行代码,就能生成超棒的图表!

散点图矩阵

假如我们要探索许多不同变量之间的关系,散点图矩阵(也被称为SPLOM)就是个很棒的选择:

即使是这样复杂的图形,也是完全可交互的,让我们能更详尽地对数据进行探索。

关系热图

为了体现多个数值变量间的关系,我们可以计算它们的相关性,然后用带标注热度图的形式进行可视化:

自定义主题

除了层出不穷的各种图表外,Cufflinks 还提供了许多不同的着色主题,方便你轻松切换各种不同的图表风格。下面两张图分别是“太空”主题和“ggplot”主题:

此外,还有 3D 图表(曲面和泡泡):

对有兴趣研究的用户来说,做张饼图也不是什么难事:

在 Plotly 图表工坊(Plotly Chart Studio)里编辑

当你在 Jupyter Notebook 里生成了这些图表之后,你将会发现图表的右下角出现了一个小小的链接,写着“Export to plot.ly(发布到 plot.ly)”。如果你点击这个链接,你将会跳转到一个“图表工坊”(https://plot.ly/create/)。

在这里,你可以在最终展示之前进一步修改和润色你的图表。可以添加标注,选择某些元素的颜色,把一切都整理清楚,生成一个超棒的图表。之后,你还可以将它发布到网络上,生成一个供其他人查阅的链接。

下面两张图是在图表工坊里制作的:

讲了这么多,看都看累了吧?然而我们还并没有穷尽这个库的所有功能。限于篇幅,有些更棒的图表和范例,只好请大家访问 plotly 和 cufflinks 的官方文档去一一查看咯。

(Plotly 交互式地图,显示了美国国内的风力发电场数据。来源:plot.ly)

最后 ……

关于沉没成本谬误,最糟糕的一点在于,人们往往只能在放弃之前的努力时,才能意识到自己浪费了多少时间。

在选择一款绘图库的时候,你最需要的几个功能有:

  • 快速探索数据所需的一行代码图表

  • 拆分/研究数据所需的交互式元素

  • 当需要时可以深入细节信息的选项

  • 最终展示前能轻易进行定制

从现在看来,要用 Python 语言实现以上功能的最佳选择非 plotly 莫属。它让我们快速生成可视化图表,交互功能使我们更好地理解信息。

我承认,绘图绝对是数据科学工作中最让人享受的部分,而 plotly 能让你更加愉悦地完成这些任务。

(用一张图表显示一下用 Python 绘图的愉悦程度随着时间变化。来源 towardsdatascience.com)

2021 年是时候升级你的 Python 绘图库了,让自己在数据科学和可视化方面变得更快、更强、更美吧!

彩蛋

最后,想学习Python的小伙伴们:

这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。送给正在学习python的小伙伴!这里是python学习者聚集地,欢迎初学和进阶中的小伙伴!

私信我 666  分享给你们

 
 

被“Python之父”称为最强外挂 这个Python库没人敢说不好相关推荐

  1. Python 之父:因打发时间创造 Python,躬耕多年退位

    点击上方"Python大本营",选择"置顶公众号" Python大本营 IT人的职业提升平台 作者 | 年素清 出品 | 程序人生(ID:coder_life) ...

  2. Python 之父:别等了,Python 4.0 可能不会来了

    来自:机器之心 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python ...

  3. Python之父(龟叔):Python 4.0可能不会来了

    不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python 2 的维护,意味 ...

  4. 中国python之父是谁-别了!Python之父!

    原标题:别了!Python之父! 前段时间,Python之父退出了Python,这个创造出了世界上最令人欢迎的编程语言之一Python(胶水语言)的技术界大牛终于不用再为运营的事情苦恼了! 有人说:耿 ...

  5. 鸿蒙起源轩辕厉害吗,风云雄霸天下中最强的武器“轩辕剑”为什么没人拿?

    风云雄霸天下这部电视剧中出现了很多非常强大的神兵利器,像绝世好剑.雪饮狂刀.火麟剑.无双剑.英雄剑等等.那么接下来要说的这把剑应该是剧中隐藏的一把绝世神兵,这把神兵的名字叫做"轩辕剑&quo ...

  6. python分析比赛_最强观战指南 | Python分析热门夺冠球队(附源代码)

    2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...

  7. Python 之父谈放弃 Python:我对核心成员们失望至极!

    Python 之父讲述退位原因,以及 Python 的未来将何去何从. 在 Python 社区,Python 的发明者 Guido Van Rossum 被称为 "仁慈的终生独裁者" ...

  8. python之父叫啥-对话Python之父:Python下一步做什么?

    Python部落组织翻译,禁止转载,欢迎转发 InfoWorld的编辑对话Python之父,讨论Python的性能.生态系统和在移动开发和浏览器方面的前景. 问:有没有什么正在做的计划,来促进Pyth ...

  9. python之父叫什么-对话Python之父:Python下一步做什么?

    Python部落组织翻译,禁止转载,欢迎转发 InfoWorld的编辑对话Python之父,讨论Python的性能.生态系统和在移动开发和浏览器方面的前景. 问:有没有什么正在做的计划,来促进Pyth ...

最新文章

  1. Swift版音乐播放器(简化版),swift音乐播放器
  2. mockito_Mockito和Hamcrest的试驾制造商
  3. mysql用代码建表基础语法
  4. java递归mysql生成树_JavaScript图形实例:递归生成树
  5. dbcc收缩数据库_使用DBCC SHRINKFILE收缩数据库
  6. 2019 Web 前端热点笔试面试题总结(转载)
  7. FreeMarker笔记 第二章 数值和类型
  8. 凹凸实验室:支撑数千万消费者的小程序开发实践
  9. 指令级并行——超标量Superscalar与超长指令字VLIW架构
  10. html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
  11. Linux系统升级及内核版本升级
  12. “漫威月”来临,蜘蛛侠成首个 NFT 超级英雄 IP
  13. 计算机C语言二级操作题之编程题
  14. 检测xposed框架实现
  15. 一位沪漂 11 年的程序员老兵,回老家了!
  16. 安踏正式宣布王一博成为其全球首席代言人
  17. python split
  18. 华为LiteOS操作系统基础知识入门与内核移植
  19. 安装saltstack遇到缺包问题!自己遇到的错!若有雷同请海涵
  20. mmap函数使用说明以及示例

热门文章

  1. 运营︱快速提高app日活的方法
  2. 【最终幻想15 国王之剑】制作介绍1:不再是游戏动画,而是“电影”制作
  3. 人工智能刷题(个人向)
  4. 乌镇互联网大会发布15项世界领先科技成果
  5. 一加手机可以刷鸿蒙系统吗,朋友想把1+手机安装鸿蒙系统,老板收费350,大家千万别被骗了!...
  6. MT940银行对账单怎么解析呢
  7. 开关电源拓扑结构详解
  8. 追剧人的福利来了,这几款APP让你痛快追剧
  9. Scratch教学大纲
  10. 少儿编程教培管理系统,scratch课程