大数据 爬虫Python AI SqlPython中文社区R. python新手日记

Python数据处理从零开始----第四章(可视化)(1)

2018-10-26  本文已影响26人  柳叶刀与小鼠标

目录

Python数据处理从零开始----第四章(可视化)①

Python数据处理从零开始----第四章(可视化)②

Python数据处理从零开始----第四章(可视化)③

======================================================

背景:

我们现在将深入研究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。

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()差别很小,但是我们将在下面的部分中提出一些问题。

上一篇下一篇

猜你喜欢

热点阅读