Matplotlib 是建立在 Numpy 数组基础上支持多平台数据可视化的 Python 库
导入 Matplotlib
简写形式:
import matplotlib as mpl
import matplotlib.pyplot as plt
在不同的环境下使用 Matplotlib
脚本
调用 plt.show()
显示图像
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
# 启动事件循环并阻塞
plt.show()
IPython Shell
可通过 %matplotlib
魔法命令启动 Matplotlib 模式, 调用任何 plt 的函数时自动打开一个图形窗口, 追加调用 plt 函数时更新该窗口, 无需使用 plt.show()
In [1]: %matplotlib
Using matplotlib backend: Qt5Agg
In [2]: import matplotlib.pyplot as plt
In [3]: import numpy as np
In [4]: x = np.linspace(0, 10, 100)
In [5]: plt.plot(x, np.sin(x))
Out[5]: [<matplotlib.lines.Line2D at 0x7f7d98166b90>]
In [6]: plt.plot(x, np.cos(x))
Out[6]: [<matplotlib.lines.Line2D at 0x7f7d9817e210>]
如下图所示:
IPython Notebook
与 IPython Shell 类似, 通过魔法命令开启 Matplotlib 模式, 有两种形式
%matplotlib notebook
在 Notebook 中启动交互式图形%matplotlib inline
在 Notebook 中启动静态图形
两种绘图风格
Matplotlib 绘图涉及到两个核心对象 plt.Figure
和 plt.Axes
分别表示窗口和坐标轴, 一个窗口可容纳多个坐标轴, 一个坐标轴对应一个绘制图像
MATLAB 风格
在这种风格下, 程序会记录"当前的"窗口和坐标轴
- 首次绘图时, 程序自动创建窗口以及属于这个窗口的坐标轴
- 下一次绘图时, 程序默认沿用这个窗口并在该窗口上新建坐标轴, 如果你手动新建了窗口, 程序将该窗口视为"当前的"窗口
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
# 创建窗口
plt.figure("MATLAB Style")
# 创建两个子窗口中的第一个
plt.subplot(2, 1, 1) # (行, 列, 子窗口编号)
plt.plot(x, np.sin(x))
# 创建两个子窗口中的第二个
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x))
plt.show()
面向对象风格
显示指定绘图所用的坐标轴
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
# 1. subplots 自动创建 plt.Figure 对象
# 2. axes 包含两个 plt.Axes 对象
fig, axes = plt.subplots(2, num="OOP Style")
# 在每个 plt.Axes 上调用 plot 方法
axes[0].plot(x, np.sin(x))
axes[1].plot(x, np.cos(x))
plt.show()
保存图像
两种风格对应两种调用方式:
-
plt.savefig('xxx.png')
以 PNG 格式保存当前窗口 -
fig.savefig('xxx.jpg')
以 JPG 格式保存指定的窗口(fig 为plt.Figure
对象)
import os
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))
# 新建窗口, 自动切换为"当前"窗口
plt.figure()
plt.plot(x, np.cos(x))
plt.savefig(os.path.expanduser("~/Pictures/01-savefig.png"))
将新建的窗口(仅包含余弦图形)保存到 ~/Pictures/01-savefig.png