2

功能强大的开源 Python 绘图库

 1 year ago
source link: https://www.51cto.com/article/720326.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

功能强大的开源 Python 绘图库

2022-10-10 10:14:38
今天给大家分享一篇可视化干货,介绍的是功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。
3637ab678291a023fd932468bde0fc24728921.jpg

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

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

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

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

e29c8a93913106b86b66126a4b6d211ade6bd2.jpg

(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 里完成导入:

652fea1591f7b2ea1c8660ae229690822d9226.jpg

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

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

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

a1a078f450bf0d5119e878e09135471cae841b.jpg

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

f1ca26933c637f491fd119c46b7d14e358e37b.gif

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

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

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

d775ac906b8885e3045008dd662a60ccc8a8a1.jpg
e604f665260d6005c0f400d1004f8780d2ce94.jpg

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

4823a5222f869aacf06135dcc5b01f847708fc.jpg
86d320c933583ce8437340f96f5f1604b4f4ff.jpg

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

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

e2cb742538270e37dca958cc493a2760b43eae.jpg
614857309d608397d33556429c3fdede63179c.gif

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

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

时间序列分析

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

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

f9f992c8143936dfb5927802f6030eb9955ff2.jpg
11a31cf17868c2684ec3063ae61880e5d13b79.gif

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

  •  自动生成美观的时间序列 X 轴
  • 增加第二条 Y 轴,因为两个变量的范围并不一致
  • 把文章标题放在鼠标悬停时显示的标签中

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

353d1ae770422c4a4c17182196b372bf89f07a.jpg
67fe57869ca5b321848480db215f4ede322689.jpg

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

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

15605e96457eca07a866325638081ff28ee8fe.jpg
669f35d535db8d57b90341e36e6482c8f4914c.jpg

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

f78a94b353b614b39d97344a77d6f508829f57.jpg
b98c223734819703737228f3dffff006a3d7e4.jpg

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

6867ffa7979112742a7285987ea717043d91cf.jpg

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

d133b3345b2a063295176278cd442c5556cb5b.jpg
15553aa52c9a7cc61b736438463853ade27311.jpg

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

高级绘图功能

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

散点图矩阵

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

69fcfb165d3724775c26624c97840f5d4e7957.jpg
e6e418a52fb77266be57669656a539efc99940.jpg

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

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

458151a91a0dba6cd513449f594fd9755d3129.jpg
35c1a9307f1d7d24e9c587220e1bd3a1cc47bf.jpg

自定义主题

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

39682dd009b76b5c67167212e8a75c0221490b.jpg
86fa8b25749b3e11bea3171c1cc260114cf5a2.jpg

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

5702700764179e46bd5775f684b204191c4eaf.jpg
4804c0816ef5fd4dc572884379a80394211948.jpg

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

833c24c99e2c2801bbc3982a4799ee43d3035c.jpg

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

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

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

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

18ccef923f4ffdb55a013155ed9ba9152a8b09.jpg
933f16e075fa114eda9710e45c06cdea774f11.jpg

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

75fe762009cc8ccfea2611c5862b9da625f28d.jpg

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

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

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

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

  • 拆分/研究数据所需的交互式元素
  • 当需要时可以深入细节信息的选项
  • 最终展示前能轻易进行定制

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

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

5310dc8932b4977ba98124ffe861913558070c.jpg

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

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

责任编辑:庞桂玉 来源: Python开发者

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK