Python数据处理从零开始----第四章(可视化)背景:Matplotlib

背景:

我们现在将深入研究Matplotlib包,以便在Python中进行可视化。 Matplotlib是一个基于NumPy阵列的多平台数据可视化库,旨在与更广泛的SciPy协同工作。它由John Hunter在2002年构思,最初是作为IPython的补丁,用于通过来自IPython命令行的gnuplot实现交互式MATLAB风格的绘图。 IPython的创始人Fernando Perez当时正完成他的博士学位,而约翰知道他几个月没时间补丁了。约翰认为这是他自己开始的一个提示,Matplotlib软件包诞生了,2003年发布了0.1版本。当它被作为太空望远镜科学研究所选择的绘图包时,它得到了早期的提升。哈勃望远镜背后的科学家在财务上支持Matplotlib的开发并大大扩展了其功能。

Matplotlib最重要的功能之一是它能够很好地兼容许多操作系统和图形后端。 Matplotlib支持许多后端和输出类型,这意味着无论您使用哪种操作系统或您希望使用哪种输出格式,您都可以依赖它。这种跨平台,一切对每个人的方法都是Matplotlib的强大优势之一。它带来了庞大的用户群,这反过来又导致了活跃的开发人员基础和Matplotlib在科学Python世界中的强大工具和普遍性。

然而,近年来,Matplotlib的界面和风格已经开始显示它们的年龄。 R语言中的ggplot和ggvis等新工具,以及基于D3js和HTML5画布的Web可视化工具包,经常使Matplotlib感觉笨重和老式。尽管如此,我认为我们不能忽视Matplotlib作为经过良好测试的跨平台图形引擎的优势。最近的Matplotlib版本使得设置新的全局绘图样式变得相对容易(请参阅自定义Matplotlib:配置和样式表),人们一直在开发基于其强大内部构建的新软件包,通过更清晰,更现代的API来驱动Matplotlib,例如, Seaborn(可视化与Seaborn讨论),ggpy,HoloViews,Altair,甚至Pandas本身都可以用作Matplotlib API的包装。即使使用这样的包装器,通常也可以深入研究Matplotlib的语法来调整最终的绘图输出。出于这个原因,我相信Matplotlib本身仍将是数据可视化堆栈的重要组成部分,即使新工具意味着社区逐渐不再使用Matplotlib API。

Matplotlib

一般Matplotlib技巧

在我们深入了解使用Matplotlib创建可视化的细节之前,您应该了解一些有关使用该软件包的有用信息。 1.导入Matplotlib 就像我们使用np简写为NumPy和pandas的pd简写一样,我们将使用Matplotlib导入的一些标准shorthands:

import matplotlib as mpl
import matplotlib.pyplot as plt

我们将matplotlib导入为mpl,将matplotlib.pyplot导入为plt 而plt接口是我们最常使用的接口。

设置样式

我们将使用plt.style指令为我们的数字选择合适的美学风格。在这里,我们将设置经典样式,确保我们创建的图使用经典的Matplotlib样式:

plt.style.use( 'classic')

我们可以根据自己需求调整样式。

如何显示我们画的图

Matplotlib大概三个常用的编译环境,分别是脚本,IPython终端或IPython笔记本中使用Matplotlib。

  • 从脚本绘图 如果您在脚本中使用Matplotlib,则函数plt.show()并打开一个或多个显示您的图形或图形的交互式窗口。有一点需要注意:plt.show()命令每个Python会话只能使用一次,最常见于脚本的最后。
  • 从IPython shell绘图 在IPython shell中以交互方式使用Matplotlib非常方便(参见IPython:Beyond Normal Python)。如果指定Matplotlib模式,IPython可以很好地与Matplotlib一起使用。要启用此模式,可以在启动ipython后使用%matplotlib magic命令:
  • 从IPython笔记本绘图 IPython笔记本是一种基于浏览器的交互式数据分析工具,可以将叙述,代码,图形,HTML元素等组合到一个可执行文档中(参见IPython:Beyond Normal Python)。可以使用%matplotlib命令在IPython笔记本中以交互方式绘制,并以与IPython shell类似的方式工作。%matplotlib inline 笔记本将导致嵌入在笔记本中的交互式图
import matplotlib.pyplot as plt

import numpy as np
x = np.linspace(0, 10, 100)

fig = plt.figure()
plt.plot(x, np.sin(x), '-')
plt.plot(x, np.cos(x), '--');

保存已经画好的图片

Matplotlib的一个很好的功能是能够以各种格式保存数字。 可以使用savefig()命令保存图形。 例如,要将上一个图保存为PDF文件,可以运行以下命令:

fig.savefig('my_figure.pdf')

使用一下命令确认该图已经保存

# In[*]
fig.savefig('my_figure.jpeg')
from IPython.display import Image
Image('my_figure.jpeg')

在savefig()中,文件格式是从给定文件名的扩展名推断出来的。 根据您安装的后端,可以使用许多不同的文件格式。 通过使用图形画布对象的以下方法,可以为系统找到支持的文件类型列表:

fig.canvas.get_supported_filetypes()
Out[12]: 
{'ps': 'Postscript',
 'eps': 'Encapsulated Postscript',
 'pdf': 'Portable Document Format',
 'pgf': 'PGF code for LaTeX',
 'png': 'Portable Network Graphics',
 'raw': 'Raw RGBA bitmap',
 'rgba': 'Raw RGBA bitmap',
 'svg': 'Scalable Vector Graphics',
 'svgz': 'Scalable Vector Graphics',
 'jpg': 'Joint Photographic Experts Group',
 'jpeg': 'Joint Photographic Experts Group',
 'tif': 'Tagged Image File Format',
 'tiff': 'Tagged Image File Format'}

Matplotlib的两个接口

Matplotlib的一个可能令人困惑的特性是它的双重接口:一个方便的

MATLAB风格的基于状态的接口,以及一个更强大的面向对象的接口。

MATLAB风格的基于状态的接口

Matplotlib最初是作为MATLAB用户的Python替代编写的,其大部分语法都反映了这一事实。 MATLAB风格的工具包含在pyplot(plt)界面中。 例如,以下代码可能对MATLAB用户来说非常熟悉:

plt.figure()  #创建图形

# 设置双图的第一个图
plt.subplot(2, 1, 1) # (rows, columns, panel number)
plt.plot(x, np.sin(x))

# 设置双图的第二个图
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x));

这种接口最重要的特点是有状态的,它会跟踪‘当前的’图片和坐标轴,可以使用plt.gcf()和plt.gca()获取当前图片和坐标轴。这样带来的问题就是当我们画第二个图时,怎么回到第一个子图并增加新内容呢?

面向对象的接口

fig, ax = plt.subplots(2)

# Call plot() method on the appropriate object
ax[0].plot(x, np.sin(x))
ax[1].plot(x, np.cos(x));

一般而言选择使用哪种样式在取决于偏好,但是当面对比较复杂的图时,应该选择ax.plot()。在大多数情况下,将plt.plot()切换到ax.plot()差别很小,但是我们将在下面的部分中提出一些问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CRPER折腾记

Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件

本来想写个props映射下regionName,regionId,child; 但是感觉作用不大,就没写了,(一般公司的地区JSON格式定下来了之后变动的可能性...

11410
来自专栏magicsoar

二维码知识介绍

一、二维码的分类 二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没...

404100
来自专栏Python数据科学

手把手教你制作一个动态炫酷的可视化图表(历年中国大学学术排行榜)

摘要::最近在朋友圈看到一个很酷炫的动态数据可视化表,介绍了新中国成立后各省GDP的发展历程,非常惊叹竟然还有这种操作,也想试试。于是,照葫芦画瓢虎,在网上爬取...

4.5K100
来自专栏小詹同学

爬点重口味的 。

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,对面的女孩看过来(邪恶的一笑),让人想入非非啊,一看卧槽,左边这妹子彻底赢了,这(**)这么大,还这么漂亮,...

17220
来自专栏IMWeb前端团队

那些年我们踩过的坑

事件背景 有一天leader给程序员cover分配了一个需求,cover一看,需求很简单嘛,就是在页面异步拉取数据展示就OK了,于是就和cgi同事阿翔对接了一下...

254100
来自专栏iOSDevLog

day0-准备工作: 工具介绍准备工作: 工具介绍AnaCondaNumPy

拥有超过600万用户,开源Anaconda Distribution是在Linux,Windows和Mac OS X上进行Python和R数据科学和机器学习的最...

31530
来自专栏小轻论坛

3个少有人知的word小技巧,5秒学会,超实用!

一提到娱乐明星八卦、军事野史鸡汤,大家都迫不及待乖巧等听,哪怕挤出吃饭睡觉时间也要认真关注。提到工作学习技能、素质锻炼提升,很多人就连连摆手一脸抗拒,没时间没精...

7220
来自专栏极客生活

python爬虫隔一段时间一乐之海子的诗

每隔一段时间(一周到一个月)拿出1到2天来做一个好玩的东西,不求回报,只为快感。 前两天刚买了一本电子书《海子的诗》,晚上读了快一半,好多诗里面都提及了麦子和...

10810
来自专栏编程

那些有趣的 Linux 命令

英文:mylinuxbook,译文:快乐的骚年, www.cnblogs.com/sukai/archive/2013/06/08/3127031.html 1...

255100
来自专栏数据小魔方

流量结构分布图——桑基图(Sankey)

桑基图作为相对复杂的图表种类,平时很少用到,不仅仅是因为它的引用场景相对狭窄,另一方面则是制作难度相对较大,门槛较高。 不过针对第一个问题,如果你能很好地理解自...

1.4K50

扫码关注云+社区

领取腾讯云代金券