Python 数据分析:基于Plotly 的动态可视化绘图(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-03 15:17:46

点击下载

作者:孙洋洋 等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python 数据分析:基于Plotly 的动态可视化绘图

Python 数据分析:基于Plotly 的动态可视化绘图试读:

内容简介

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于 Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。本书主要介绍Plotly在可视化各领域的应用,包括基础绘图、数据处理、网页开发、程序GUI、机器学习和量化投资等,方便读者对Plotly快速上手。

本书绝大部分代码用Python语言编写,同时也给出了Plotly在R语言、MATLAB和JavaScript中的应用案例。前 言

Python是一门非常优秀的编程语言,其语法简洁、易学易用,越来越受到编程人员的喜爱;Python也是一门非常“人性化”的编程语言,其各种语法规则的设计符合人们的思维方式,开发人员可以用最简单的方式实现自己的编程目的,降低时间成本;同时,Python又是一门非常强大的编程语言,其在编程的各个领域都有非常不错的表现,比如在网页开发、程序GUI设计、网络爬虫、科学计算、数据可视化、机器学习与深度学习等领域,Python都有非常好的解决方案来解决现实中的业务问题。

互联网的快速发展为我们积累了庞大的数据,计算机硬件的创新为存储与分析这些数据创造了硬件条件,编程语言的发展为分析这些数据创造了软件条件。在数据分析这个领域,Python有着自己独有的优势,简单易用的特性与强大的开源模块的支持使其成为数据分析领域方便、好用的利器。

Python在数据分析领域的广泛应用离不开其强大的开源模块的支持,大名鼎鼎的NumPy、SciPy、StatsModels、Pandas等模块的建立与发展奠定了Python在数据分析领域中的重要地位。这些模块简单又好用,它们提供的解决方案能够满足绝大部分业务需求。在人工智能领域,Python也有非常棒的解决方案,如 Sklearn、TensorFlow、MXNet、Theano、PyTorch、Caffe等都是非常好的开源模块。尤其在人工智能中最前沿的深度学习领域,Python几乎占据了霸主的地位。Python借助在数据分析领域中开源模块的优势,在量化投资领域逐渐占据了领头羊的地位。国内外主流量化投资网站大多支持Python语言,其在量化投资领域有一种逐渐淘汰其他语言,一统“江湖”之势。

对数据的分析离不开数据的可视化,相对于Python在数据分析、人工智能、量化投资等领域中的发展,在数据可视化方面的发展有些滞后。最经典的Python可视化绘图库莫过于 Matplotlib了,Matplotlib就是 MATLAB+Plot+Library,即模仿MATLAB的绘图库,其绘图风格与MATLAB类似。由于MATLAB的绘图风格有些偏古典,为了绘出更漂亮的图像,Python开源社区开发出了Seaborn绘图模块,它本质上是对 Matplotlib的封装,绘图效果更符合现代人的审美观。尽管如此,由于Matplotlib是基于GUI的绘图模块,所以存在特有的缺陷。

就笔者使用的经验而言,Matplotlib主要存在两大缺陷:首先,Matplotlib是一个静态的绘图模块,即我们绘出的图像是静态的,就像用看图软件打开图片一样,没有网页绘图的交互式效果;其次,Matplotlib绘图结果的分享很不方便,在绘图结果分享给别人时只能以图片的方式分享,别人看到的绘图结果完全是静态的,分享体验很不好。Matplotlib一直以来都是 Python可视化的主力军,但是确实存在无法克服的缺陷,并且其他的Python绘图模块如Ggplot、Bokeh、Pygal等都比较小众,绘图功能比较单一,完成不了对Matplotlib的替代。

为了解决 Python在可视化中存在的问题,Plotly应运而生,它是一个基于JavaScript的动态绘图模块。Plotly的绘图效果与我们在网页上看到的动态交互式绘图效果是一样的,其默认的绘图结果是一个HTML网页文件,通过浏览器就可以查看。我们可以把这个HTML文件分享给其他人,对方看到的效果与我们在本机上看到的效果完全一样。

Plotly有着自己强大又丰富的绘图库,支持各种类型的绘图方案。Plotly是基于JavaScript的绘图库,所以其绘图结果可以与Web应用无缝集成。总之,Plotly在绘图模块上是Matplotlib强有力的竞争对手,Plotly绘图的种类丰富、效果美观、易于保存与分享,因而越来越受数据分析人士的喜爱,至少笔者对Plotly的喜爱胜于对Matplotlib的喜爱。

Plotly最初是一款商业化的绘图软件,在2015年11月12日,Plotly开发团队决定把该模块的核心框架plotly.js开源,由此Plotly得到了快速发展。虽然在2016年6月,Plotly开发团队才正式发布其Python-api文档,在2017年 1月,Plotly 1.0才正式发布,但是这些都阻止不了程序员对Plotly的喜爱。自plotly.js开源之后,我们可以使用本地的离线模式进行绘图,不依赖于官方的服务器,使得绘图速度更快,效果与在线绘图一样,这也是目前使用Plotly绘图的主流模式。

市面上有很多关于 Matplotlib的可视化绘图教程,但是还没有 Plotly的相关图书,作为一款非常优秀的可视化绘图模块,市面上急需一本科普性的图书。在本书创作之前,市面上就已经出现了电子版的对Plotly的简单翻译版本《Plotly中文说明1期》,这是极宽量化开源团队在2017年1月的作品。极宽量化开源团队是一群研究“Python量化投资”的爱好者自愿组成的一个团队,该团队成立的初衷是为国内量化投资领域做出自己的一份贡献,目前已经成功初步翻译PyAlgoTrade、Seaborn、StatsModels、Plotly等开源模块,并公开上传到网络上,《Plotly中文说明 1期》正是该团队的一个作品。

我作为极宽量化开源团队《Plotly中文说明 1期》项目的第一负责人,最初的想法只是单纯地把 Plotly的基础内容简单翻译一下,以最简单、最快速的方式呈现给大家,方便大家使用。但是后来电子工业出版社的黄爱萍编辑找我沟通,请我编写一本Plotly数据可视化的相关图书,她认为Plotly发展很快,市场上需要一本Plotly的相关教材。经过一段时间的权衡,考虑到个人对Plotly的掌握程度、开源团队对Plotly的热情、个人在写《PyQt 5快速开发与实战》时与黄编辑建立的良好关系,以及《Plotly中文说明 1期》存在的太多缺陷等,也为了能让更多的人接触 Plotly这个优秀的绘图模块,于是决定再次抽出大量的时间来完成本书的创作,这就是本书的写作背景。

Plotly是一个非常优秀的顶级绘图模块,如此优秀的开源模块在国内的知名度却不是很高,这对国内开发人员来说是一个很大的遗憾。顶级模块在特定的领域达到家喻户晓的程度是一个必然的趋势,Plotly正是这种模块,它在可视化绘图领域的表现终会大放异彩。虽然目前 Plotly在国内知名度不是很高,但其在可视化绘图领域做到家喻户晓是一个必然的趋势,只是需要有人加速这种趋势的演化过程,这就是本书存在的意义。

本书结构

本书的框架结构如下。

第1章是本书的快速入门部分,介绍Plotly的安装环境,对在线绘图与离线绘图做了简要的介绍。

第2章是基础绘图部分,对Plotly的一些常见的基础图形如线形图、柱状图、饼图、气泡图和直方图等做了一些介绍。

第3章是高级图形部分,对Plotly的时间序列绘图、表格绘图、多个坐标轴绘图、多子图绘图、SVG绘图等做了一些介绍,是Plotly绘图的高级应用。

第4章是Pandas部分,介绍Pandas这个顶级数据分析模块使用Plotly进行绘图的方法。

第5章是金融绘图部分,主要为金融领域的特殊图形尤其是K线图的绘制提供了解决方案。

第6章是Matplotlib部分,主要介绍如何把Matplotlib绘图迁移到Plotly中。

第7章是网页开发部分,主要介绍Plotly在Python网页开发框架Django和Flask中的应用。

第8章是GUI开发部分,主要介绍Plotly在GUI开发框架PyQt 5中的应用。

第9章是机器学习部分,主要介绍Plotly在机器学习框架Sklearn与PyTorch中的应用。

第10章是量化投资部分,主要介绍Plotly在量化投资领域中的可视化应用。

第11章是其他语言应用部分,主要对其他语言如R、MATLAB、JavaScript的Plotly绘图做了简要的介绍。

如果你仅仅对Plotly的基础绘图有兴趣,那么前两章的内容就能满足你的需求;如果你对Plotly更高级的绘图有兴趣,那么可以参考第3章的内容;对于本书其他章节的内容,可以根据自己的实际情况有选择地阅读,毕竟 Plotly绘图所涉及的范围特别广泛,并不是每个人对这些领域都同时感兴趣。

本书代码与交流

本书的所有代码都将保存在GitHub上,后续代码更新也会以GitHub地址为准,网址是 https://github.com/sunshe35/PythonPlotlyCodes,读者可自行下载。另外,为了方便读者交流、学习Plotly,笔者建立了QQ群(群号:72203080)。

致谢

Plotly虽然只是一个绘图模块,但是其应用场景非常广泛,除有Matplotlib的基本绘图功能外,其在Web开发、GUI开发、机器学习、量化投资等领域也有很好的应用场景。由于其应用场景特别广泛,结合笔者自身知识的局限性,所以写好一本书需要多个人的共同努力,非常感谢下面这些作者对本书的创作所付出的努力:王硕负责本书的Flask、PyTorch、JavaScript部分;邢梦来负责本书的Matplotlib部分;袁泉负责本书的基础绘图与Sklearn部分;吴娜负责本书的Pandas部分,其他都由本人孙洋洋负责。在 Plotly的写作过程中,还有一些人为本书的顺利出版做出了贡献:首先,感谢《Plotly中文说明 1期》的开源组成员们,你们的贡献是本书基础部分的雏形,相关人员的网名和 QQ号分别是 youngle sunny 1535327967、余勤441499022、华子 32509167、啦啦啦 505512828、禛 948280670、L. 1248515039、Rikimaru 11766429、iris 704699640、信平 759949947、吴娜 2184934、周涛 510548099、zw木子 719735825、非洲兔 85011284、十二月 378258849、大朱 775941748、我爱作文你信吗 571171954。其次,感谢山西证券金融科技部的陈亦苏、成都数联铭品科技有限公司的刘赣,以及极宽量化开源组的梁勇对本书网页开发部分提供的帮助,感谢西南财经大学统计学院王彦锋博士对本书R语言部分提供的帮助,感谢北京大学汇丰商学院硕士研究生扶禄城对本书MATLAB部分提供的帮助。再次,感谢黄爱萍与戴新两位编辑对本书的出版所付出的努力。最后,感谢我的父母与兄弟姐妹对我的关心与照顾,我现在取得的成果离不开你们对我的付出。

与读者相识于Plotly是一种缘分,能够看到本书说明读者对Plotly是感兴趣的,感谢读者愿意花费时间阅读本书,希望每一位读者都能够通过阅读本书有所收获,真心祝愿你们都能够学习顺利、事业有成。孙洋洋2018年4月

轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。

● 下载资源:本书如提供示例代码及资源文件,均可在 下载资源处下载。

● 提交勘误:您对书中内容的修改意见可在 提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。

● 交流互动:在页面下方 读者评论处留下您的疑问或观点,与我们和其他读者一同学习交流。

页面入口:http://www.broadview.com.cn/34113第1章快速开始1.1 Plotly简介

Pandas(潘达思)数据分析软件和Plotly互动式绘图模块可以称为Python数据分析和Python量化分析两大重量级模块库。

事实上,这两者的影响力早已超越Python语言领域。

● Pandas目前已经被业界公认是大数据工程一线最好的解决方案。

● Plotly被称为史上最好的绘图工具之一,是GitHub开源网站最“火”的两大新项目之一(另外一个是Netflix的Spinnaker云计算项目)。

为了更好地展示金融数据的复杂性,下面首先介绍 Plotly绘图模块。如图1-1所示是Plotly网站截图,网址是https://plot.ly。

Python量化的关键是金融数据可视化,无论是传统的K线图,还是现在的互动策略分析,都需要大量的可视化图表。具体到编程代码,就是各种Python绘图模块库,传统Python绘图模块库有Matplotlib、Ggplot、Seaborn、Bokeh等。

Plotly绘图底层使用的是plotly.js,plotly.js基于D3.js、stack.gl(WebGL组件库,由Plotly团队的Mikola Lysenko带领开发)和SVG,用JavaScript在网页上实现类似MATLAB和Python Matplotlib的图形展示功能,支持数十种图形,包括2D和3D图形,交互流畅,可以满足一般科学计算的需要。该项目成功后,开始向其他语言移植,目前已经有Python、MATLAB、R语言、Jupyter等多种版本的API接口。图1-1 Plotly网站截图

Plotly项目的创始人是Alex Johnson,是哈佛大学物理博士,曾经做过燃料电池。该项目的参与者中有一位华裔女生,叫Baobao Zhang(张宝宝),是耶鲁大学政治学博士。Fernando Perez(IPython Notebook创始人)是该项目的顾问。

Plotly项目团队在2013年就已经拿到数百万美元的投资,并在加拿大蒙特利尔注册了公司,公司名称是科学数据云服务公司,号称是“首个科学数据平台”,提供线上和联机服务,方便用户使用分享、评论等功能,其投资商有MHS资本、西门子风险资本、Rho Ventures、Real Ventures和硅谷银行等。

Plotly公司有很多大牌客户,如西门子、Google、美国国家航天局(NASA)、美国空军、华盛顿邮报、美国国家卫生研究院等。

Plotly公司的联合创始人Jack Parmer这样说过:对于开发者来说,绘制出漂亮的、交互式的图表并将之分享是一件很容事的事,但是对于一般的用户则很困难。Plotly改变了这种局面,借助互联网的媒介、利用世界级的绘图分析工具,每个人都可以参与其中。

Hacker News(极客新闻)网站曾经专门讨论过各种图形模块库,如Matplotlib、MPLD3、Bokeh、Highcharts、Flotcharts、MetricsGraphics、Vega、Chartjs、FusionCharts和JSXGraph。相比而言,Plotly功能齐全,性能显著超过其他同类产品。

Plotly原本是收费的商业软件,幸运的是,2016年6月,Plotly绘图模块库提供了免费的社区版本,并新增了Python等多种编程语言的接口,以及离线模式支持,这对于广大中国用户而言,获得了现实的技术支持。

Python绘图模块库数不胜数,其中经典的有数十个。目前,Plotly作为新一代互动型量化绘图库,基本上可以说一统天下。如图1-2所示是Plotly绘图模块库部分内置的图形类型。图1-2 Plotly绘图模块库部分内置的图形类型

笔者在编写本书时,特别针对多种Python绘图模块库进行了测试,测试结果表明,Plotly绘图模块库的确是新一代Python绘图模块的王者之选,也是各种Web平台的优先选择绘图模块。

以笔者个人的测试感觉而言,Plotly绘图模块库既有Matplotlib绘图模块库的强大与灵活,又有Seaborn统计绘图模块库的现代配色组合与优雅报表形态。

Plotly绘图模块库可直接生成PNG等图像文件,与Bokeh绘图模块库和各种基于Web的JavaScript图表模块库类似,生成的是一个内置JavaScript脚本的HTML网页文件,虽然文件比Bokeh绘图模块库生成的文件略大,但在互动性方面,Plotly绘图模块库强大得多。

在3D图表方面,虽然笔者没有实际测试,但基于Plotly网站的案例可以看出,相对传统Python 3D图表模块库,无论在图表种类格式,还是色彩组合方面,Plotly绘图模块库都显得更加灵活和强大。

图1-3所示是Plotly绘图模块库绘制的K线图,支持互动功能,读者可以参考Top极宽量化社区的演示网页(http://www.ziwang.com/zwdemo.htm)。图1-3 Plotly绘图模块库绘制的K线图

请注意,案例中没有使用任何图片,是纯 JavaScript脚本函数,所有的图形、数据和互动都是通过JavaScript函数完成的,这些JavaScript函数全部是通过Python自动生成的。

图1-3虽然是静止的,但在浏览器中,其实是纯JavaScript脚本的函数图形,支持各种互动功能,读者可以好好体会一下,并且看看网页源码。

Plotly原本是基于JavaScript的数据图表分析绘制模块库,在编程的灵活性和图表的丰富性方面非常强大,优点数不胜数。

● Plotly本身是一款独立的Web版数据可视化工具,界面友好,提供强大的互动性操作。

● 基于现代的配色组合和图表形式,相比Matplotlib、R语言的图表,更加现代和绚丽。

● 具有简单且强大的3D图表绘制功能,支持多种格式。

● 对图形参数的修改十分简单、直观,便于初学者使用。

● 有Python、R、MATLAB、Jupyter、Excel等多种版本的接口。

● 与 Pandas(潘达思)数据分析软件无缝集成,并提供了专门的Plotly绘图模块库,设计的图表非常吸引人,而且具有高度互动性,这得益于其完善的文档和简单的Python API,用户入门也很容易,

目前,Plotly绘图模块库支持的图表格式如下。

● 基本图表:20种。

● 统计和海运方式图:12种。

● 科学图表:21种。

● 财务图表:2种。

● 地图:8种。

● 3D图表:19种。

● 报告生成:4种。

● 连接数据库:7种。

● 拟合工具:3种。

● 流动图表:4种。

随着Plotly绘图模块库软件的升级与更新,未来会增加更多的图表格式。

Plotly底层使用的是plotly.js,支持Python、R、MATLAB、JavaScript这四种语言的扩展,由于Python正处于数据分析领域的领先地位,并且其重要性呈日渐上升之势,所以本书介绍Plotly时以Python语言(Python 3)为主,同时也会给出Plotly在其他语言中的一些应用。

Plotly发展很快,其应用的领域也非常广泛,不但应用在传统意义上的数据分析与处理上,而且在网页开发、程序 GUI、机器学习等多个方面也有重要的应用。由于这个原因,本书涉及的内容很广,除Plotly基础知识外不会做太多深入的介绍,仅进行入门介绍,读者可以结合基础知识部分进行更深入的研究,这对于绝大部分读者来说并不是什么难事。

对于本书前半部分的基础知识内容,并不需要读者对Python有太多的了解,没有学过 Python的读者只需要花费两个小时了解 Python的基础语法就可以了。本书后半部分的内容,读者可以按照自己的实际需求阅读相关的章节,然后稍微修改一下就可以进行实战,通过这种方式快速掌握这些技能。1.2 安装与安装环境

安装Plotly的方法特别简单,直接用pip命令安装即可,代码如下。

pip install plotly

Plotly的Python包经常被更新,若需要升级到最新版,运行如下代码。

pip install plotly --upgrade

本书涉及的模块都是一些比较流行的模块,一般情况下都可以通过 pip命令进行安装。这里笔者建议使用Python 3.5的anaconda或winpython开发环境,因为目前笔者使用Python 3.6经常遇到一些bug,而使用Python 3.5则没有这些问题。下载anaconda或 winpython后,默认环境就是本书所依赖的环境,如果有些模块没有找到,可以通过pip命令安装。1.3 在线初始化

Plotly提供了一个在线托管绘图结果的 Web服务平台,用户可以在网站(https://plot.ly)免费创建一个账号。用户所绘制的图表会保存在自己的在线 Plotly账户中,并且可以控制相应的权限。免费的托管方式是公共的,也就是自己的绘图结果其他人也能够看见。网站也提供私有的托管方式,不过是收费的,这里不推荐,有兴趣的读者可以去官网查看。

安装好Python和Plotly后,要使用Plotly,首先要设置自己的凭据,这个凭据在网站上注册一个账号就可以获取。当用户注册Plotly账号并进行登录后,在右上角可以找到自己的用户选项,单击其中的Settings选项,然后找到API Key选项,如图1-4所示。图1-4 获取凭据

图1-4中的Username和API Key是笔者为编写本书注册的一个测试账号,读者可以通过注册自己的账号得到类似的结果。

下面我们把上面的Username和API Key记录下来,放入如下代码中,就完成了自己的凭据设置,由此,在线初始化完成。

上面的初始化步骤会在当前用户目录中存放一个特殊文件.plotly/.credentials,这个文件内容看起来是下面这样的:1.4 在线绘图隐私说明

使用在线绘图,有三种不同的隐私设置类型:公有、私有和秘密。

● 公有(1)任何人都可以查看用户的图表。(2)显示在用户的个人资料中,可以被搜索引擎搜索到。(3)用户不需要登录Plotly就可以查看这些图表。

● 私有(1)只有自己才可以查看此图表。(2)不会显示在Plotly的信息源、用户的个人资料和搜索引擎中。(3)用户需要登录才能查看这些图表。

● 秘密(1)任何拥有此秘密链接的人都可以查看此图表。(2)不会显示在Plotly的信息源、用户的个人资料和搜索引擎中。(3)如果它嵌入Web或Jupyter Notebook中,任何查看该网页的人都能够看到此图表。(4)用户不需要登录就可以查看这些图表。

在默认情况下,所有图表都被设置为公有模式。免费账户(公有模式的账户)可以有一个私有图表。如果用户有额外的私有存储需求,就需要去官网升级产品服务,感兴趣的读者可以去官网查看。1.5 开始在线绘图

在线绘图时,绘图和数据都保存在自己的云账户中。有两个方法可以实现在线绘图:py.plot()和py.iplot()。这两个方法的作用都是在自己的账户中新建一个网址并存储绘图结果。当然,这两个方法也有不同的地方。

● 使用py.plot()方法进行绘图会返回一个网址,可以选择是否打开这个网址,默认是打开的。

● 使用py.iplot()方法进行绘图会返回PlotlyDisplay对象,并以嵌入的形式在Jupyter Notebook中显示出来。

下面开始讲解我们的第一个案例(见文件Chapter01/first_start.py),只需运行如下代码。

运行上面的代码会打开一个网页,需要稍等片刻才能渲染完成,我们会看到如图1-5所示的结果。图1-5 案例运行结果

本书的第一个案例代码运行完成。

同样,在Jupyter Notebook(如果读者不知道什么是Jupyter Notebook,可以跳过这部分)中,我们也可以在 Spyder等 IDE里面完成相同的绘图操作,只需要把py.plot()改成py.iplot()就可以了(见文件Chapter01/first_start.ipynb),代码如下。

运行上面的代码后,结果如图1-6所示。图1-6 案例运行结果

我们看到,这个案例在Jupyter Notebook中绘图成功。

注意

有些读者可能是第一次接触Jupyter Notebook,不知道如何导入.ipynb 文件,这里简单介绍一下。当我们打开Jupyter Notebook 后,默认情况下,在当前目录中找不到案例文件first_start.ipynb,可以按以下步骤导入这个文件。

打开Jupyter Notebook 网页后,单击“Upload”按钮,如图1-7 所示。这时会弹出一个文件管理器窗口,选择文件first_start.ipynb,然后再次单击“Upload”按钮,就会在当前目录下看到first_start.ipynb 文件,双击该文件打开即可。图1-7 加载文件1.6 使用离线绘图库

通过前面的案例,我们可以看到 Plotly的绘图结果虽然美观,但是绘图速度太慢,原因是Plotly的服务器在国外,国内用户使用Plotly的在线绘图会有网络延迟。如果仅有在线绘图,恐怕Plotly不会发展得这么快,一是如果用户都使用在线绘图,会导致官方的服务器压力增大,这样免费服务无法长久维持下去或体验越来越差;二是这种绘图速度国内用户是无法接受的,所以开源的动态绘图模块 Plotly支持离线绘图功能。

Plotly的离线绘图功能允许在没有网络的情况下绘图,并把图像保存到本地。有两种方法可以实现上述功能:plotly.offline.plot ()和plotly.offline.iplot ()。

● 使用plotly.offline.plot ()方法会在本地新建一个HTML文件,并可以选择是否在浏览器中打开这个文件。

● 使用plotly.offline.iplot ()方法会在Jupyter Notebook 中直接绘图,而不需要新建一个HTML文件。

案例代码如下(见文件Chapter01/first_offline_start.py)。

运行以上代码,结果如图1-8所示。图1-8 案例运行结果

在 Jupyter Notebook中需要注意的是,这里需要添加一个初始化步骤,在开始绘图之前要加入一行代码。

plotly.offline.init_notebook_mode()

详细代码如下(见文件Chapter01/first_offline_start.ipynb)。

代码运行结果如图1-9所示,与上一个案例的输出效果一样。图1-9 案例运行结果

由于在线绘图和离线绘图的绘图结果没有什么不同,所以对于在线绘图,读者可以自己动手修改代码。1.7 参数解读

py.plot是绘制图形的主函数,其主要参数如下。

● show_link:默认为True,显示右下角的链接。

● link_text:右下角显示的文字,默认为Export to plotly.ly。

● validate:默认为True,确保所有关键字是有效的。但是当需要额外、非必需的关键字或plotly.js版本比graph_reference.json版本旧时,会忽略这部分内容。

● filename:设置绘图结果的存储路径,默认为temp-plot.html。1.8 查看帮助

查看帮助的操作很简单,只需要如下简单的两行代码。

对于使用Jupyter Notebook的读者,可以使用如下代码查看帮助。

对于离线绘图模式,有如下两种查看帮助的方法。

其中一个查看帮助的结果代码如下。第2章Plotly基础图形

Plotly绘图模块库支持的图形格式很多,其绘图对象包括如下几种。

● Angularaxis:极坐标图表。

● Area:区域图。

● Bar:条形图。

● Box:盒形图,又称箱线图、盒子图、箱图。

● Candlestick与OHLC:金融行业常用的K线图与OHLC曲线图。

● ColorBar:彩条图。

● Contour:轮廓图(等高线图)。

● Choropleth:等值线图。

● Line:曲线图。

● Heatmap:热点图。

● Histogram:直方图。

● Histogram 2d:2D平面直方图。

● Histogram 2d Contour:二维轮廓直方图。

● Pie:扇形图。

● Scatter:坐标分布图(包括线形图、散点图)。

本章将介绍最常用的几种图形格式:线形图、散点图、条形图、饼图、直方图、面积图、甘特图,以及金融行业常用的K线图等。2.1 基础案例解读

下面通过案例介绍在Python语言中使用Plotly绘图模块库。由于使用在线绘图模式绘图速度较慢,而且使用在线绘图模式需要注册账号,所以这里只介绍离线绘图模式。

案例2-1的文件名是first_start_introduction.py,讲解使用Plotly绘图模块库进行最简单的绘图。

为了便于逐行讲解案例,此处采用直接截图的方式展示代码,如图2-1所示。图2-1 案例2-1代码截图

案例2-1代码逐行说明如下。

● 第1行,说明该代码文件使用的是UTF-8编码格式,也是Python的例行文件头。

● 第2~4行,导入(import)所需的模块库。

● 第6行,定义一个名为trace0的变量,用于保存绘图数据;Plotly一般称一个绘图对象为 trace(画痕、画轨、画迹);每个绘图对象都由 Plotly模块库里面的graph_objs(图像对象)子模块的Scatter(数据布局)对象定义;Scatter对象的输入数据与 Plotly绘图模块库中的许多函数和对象一样,都是字典格式,而且接受多种复杂的复合字典格式。

● 第7~8行,定义变量trace0的x和y坐标,坐标采用列表数据格式,坐标x、y的数据长度必须一样,不然会出现空缺坐标;其中的x、y字符是Plotly模块库Scatter对象的内部变量名称,类似关键字。

● 第10~12行,定义另外一条曲线trace1的坐标数据,细节参见第6~8行的说明。

● 第14行,定义一个变量名data,通过pygo模块库的Data函数,把代表两条曲线的变量trace0和trace1定义为一组图形数据,注意Data函数的输入参数是列表数据格式,所以要在变量trace0和trace1外面加上表示列表的“[]”符号。

● 第16行,根据data变量的数据绘制图形。若代码无误,正确运行后,程序会自动调用浏览器,打开生成的图形,并提供互动显示,运行结果如图2-2所示。

● 第20行,运行结束后,输出“ok”信息。本程序运行后,输出的图形是通过浏览器显示的,有时浏览器在后台,不知道程序运行已经完成,所以在程序最后增加了一行运行结束的提示信息。图2-2 案例2-1 运行结果

案例2-1的第17行和第18行代码表示不同的输出模式,下面详细说明。

第16行中的filename参数,文件名格式必须以“.html”为后缀,以“.htm”为后缀会出错,读者可以尝试一下。

运行第17行和第18行代码时,请先屏蔽第16行代码,以免混乱。

第17行不使用filename参数定义文件名,Plotly模块库会自动在当前代码目录下生成一个名为temp-plot.html的文件,并自动用浏览器打开。对于多个图形,Plotly模块库会生成多个HTML文件,再用浏览器自动打开,用户需要自己设置文件名,否则新的图形文件会覆盖旧的图形文件。

第18行使用image参数,设置输出的静态图片格式为PNG格式,image参数支持PNG、JPEG、SVG、WebP格式,默认是None(无)。

与其他绘图模块库不同,Plotly生成的不是图形文件,而是一个内置JavaScript脚本的HTML网页文件,最终的图像文件需要调用浏览器的渲染引擎才能生成。

用户设置image图形输出格式后,浏览器会弹出一个下载图片对话框,需要用户手动保存输出的图形,如图2-3所示。图2-3 下载图片对话框

可能因为Plotly绘图模块库重点是云端及商业用户,所以对离线用户有些限制,这也算是目前Plotly的一个小bug,希望未来的版本能够改进。2.2 基本绘图流程

经过以上分析,使用Plotly绘图模块库进行绘图的完整流程应该包括以下命令。

● 添加图轨数据(add_trace),使用的是Scatter等函数命令。

● 设置画面布局,使用layout命令。

● 集成图形、布局数据,命令有Data、Figure。

● 绘制图形的输出,命令是offline.plot,自定义的短命令是pyplt。

这个绘图流程对绝大部分Plotly绘图案例都适用,接下来讲解Plotly的一些常见图形的绘制方法。2.3 散点图2.3.1 基本案例

线形图又称为曲线图,是最常用的图形类型。与传统的绘图软件不同,Plotly没有独立的线形图函数,而是把线形图与散点图全部用Scatter函数实现。

下面的代码(见文件scatter_basic_demo.py)是基本散点图的绘制方法,包括线形图与散点图两种图形的混合。

代码运行结果如图2-4所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载