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]: [] In [6]: plt.plot(x, np.cos(x)) Out[6]: [ ]
如下图所示:
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



