Python数据科学:Matplotlib数据可视化

Matplotlib常用技巧

设置绘图样式

我们使用 plt.style 来选择图形的绘图风格。现在选择经典(classic)风格,这样画出 的图就都是经典的 Matplotlib 风格了:
plt.style.use(‘classic’)

显示图形

如果你在一个脚本文件中使用 Matplotlib,那么显示图形的时候必须使用 plt.show()。plt. show() 会启动一个事件循环(event loop),并找到所有当前可用的图形对象,然后打开一 个或多个交互式窗口显示图形。

不过有一点需要注意,一个 Python 会话(session)中只能使用一次 plt.show(),因此通常 都把它放在脚本的最后。多个 plt.show() 命令会导致难以预料的显示异常,应该尽量避免。

在IPython shell中画图
在 IPython shell 中交互式地使用Matplotlib 画图非常方便(详情请参见第1 章),在 IPython 启动 Matplotlib 模式就可以使用它。为了启用这个模式,你需要在启动 ipython 后 使用 %matplotlib 魔法命令:
%matplotlib Using matplotlib backend: TkAgg

import matplotlib.pyplot as plt
此后的任何 plt 命令都会自动打开一个图形窗口,增加新的命令,图形就会更新。有一 些变化(例如改变已经画好的线条属性)不会自动及时更新;对于这些变化,可以使用 plt.draw() 强制更新。在 IPython shell 中启动 Matplotlib 模式之后,就不需要使用 plt. show() 了。

在IPython Notebook中画图

IPython Notebook 是一款基于浏览器的交互式数据分析工具,可以将描述性文字、代码、 图形、HTML 元素以及更多的媒体形式组合起来,集成到单个可执行的 Notebook 文档中 (详情请参见第 1 章)。
用 IPython Notebook 进行交互式画图与使用 IPython shell 类似,也需要使用 %matplotlib 命 令。你可以将图形直接嵌在 IPython Notebook 页面中,有两种展现形式。

• %matplotlib notebook 会在 Notebook 中启动交互式图形。 • %matplotlib inline 会在 Notebook 中启动静态图形。
本书统一使用 %matplotbib inline:
%matplotlib inline
运行命令之后(每一个 Notebook 核心任务 / 会话只需要运行一次),在每一个 Notebook 的 单元中创建图形就会直接将 PNG 格式图形文件嵌入在单元中(如图 4-1 所示):
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() 命令 将图形保存为文件。例如,如果要将图形保存为 PNG 格式,你可以运行这行代码:
fig.savefig(‘my_figure.png’)

两种画图接口

不过Matplotlib 有一个容易让人混淆的特性,就是它的两种画图接口:一个是便捷的 MATLAB 风格接口,另一个是功能更强大的面向对象接口。下面来快速对比一下两种接 口的主要差异。

简易线形图

在 Matplotlib 里面,figure(plt.Figure 类的一个实例)可以被看成是一个能够容纳各种坐 标轴、图形、文字和标签的容器。就像你在图中看到的那样,axes (plt.Axes 类的一个实 例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。在本书中,我们 通常会用变量 fig 表示一个图形实例,用变量 ax 表示一个坐标轴实例或一组坐标轴实例。

调整图形:线条的颜色与风格

通常对图形的第一次调整是调整它线条的颜色与风格。plt.plot() 函数可以通过相应的参 数设置颜色与风格。要修改颜色,就可以使用 color 参数,它支持各种颜色值的字符串。 颜色的不同表示方法如下所示(如图 4-9 所示):
In[6]: plt.plot(x, np.sin(x - 0), color=‘blue’) # 标准颜色名称
plt.plot(x, np.sin(x - 1), color=‘g’) # 缩写颜色代码(rgbcmyk)
plt.plot(x, np.sin(x - 2), color=‘0.75’) # 范围在0~1的灰度值
plt.plot(x, np.sin(x - 3), color=’#FFDD44’) # 十六进制(RRGGBB,00~FF)
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组,范围在0~1
plt.plot(x, np.sin(x - 5), color=‘chartreuse’); # HTML颜色名称

如果你想用一种更简洁的方式,则可以将 linestyle 和 color 编码组合起来,作为 plt. plot() 函数的一个非关键字参数使用:
plt.plot(x, x + 0, ‘-g’) # 绿色实线
plt.plot(x, x + 1, ‘–c’) # 青色虚线

调整图形:坐标轴上下限

虽然 Matplotlib 会自动为你的图形选择最合适的坐标轴上下限,但是有时自定义坐标轴上 下限可能会更好。调整坐标轴上下限最基础的方法是 plt.xlim() 和 plt.ylim():
plt.plot(x, np.sin(x))
plt.xlim(-1, 11)
plt.ylim(-1.5, 1.5)

还有一个方法是plt.axis()(注意不要搞混axes 和 axis)。通过传入[xmin, xmax, ymin, ymax] 对应的值,plt.axis() 方法可以让你用一行代码设置 x 和 y 的限值。

你还可以实现更高级的配置,例如让屏幕上显示的图形分辨率为 1:1,x 轴单位长度与 y 轴 单位长度相等(图 4-16 所示):
plt.plot(x, np.sin(x))
plt.axis(‘equal’);

设置图形标签

介绍设置图形标签的方法:图形标题、坐标轴标题、简易图例。
图形标题与坐标轴标题是最简单的标签,快速设置方法如下所示:
plt.plot(x, np.sin(x))
plt.title(“A Sine Curve”)
plt.xlabel(“x”)
plt.ylabel(“sin(x)”);

简易散点图

这种图形不再由线段连接,而是由独立的点、圆圈或其他形状构成。开始的时候同样需要在 Notebook 中导入函数:
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use(‘seaborn-whitegrid’)
import numpy as np

用plt.plot画散点图

x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, ‘o’, color=‘black’);

用plt.scatter画散点图

plt.scatter(x, y, marker=‘o’);

plt.scatter 与 plt.plot 的主要差别在于,前者在创建散点图时具有更高的灵活性,可以 单独控制每个散点与数据匹配,也可以让每个散点具有不同的属性(大小、表面颜色、边 框颜色等)

plot与scatter:效率对比

在数据量较小的时候,两者在效率上的差异不大。但是当数据变大到几千个散点时,plt.plot 的效率将大大高于 plt.scatter。

可视化异常处理

你可能感兴趣的:(Python数据科学)