Matplotlib | 创建图形(figure)对象
- 2019 年 12 月 25 日
- 筆記
Matplotlib中有多种创建图形对象的方法,常用到的有三种,下面直接举例子说明。
一、add_subplot方法
(1)首先创建图形对象fig1,然后通过add_subplot命令在fig1中建立4个子图形,最后在每个子图形中进行各自的绘图操作。
import numpy as np from numpy.random import randn import matplotlib.pyplot as plt # 创建Figure对象fig1 fig1 = plt.figure() # 在fig1中创建子图形 ax1 =fig1.add_subplot(2, 2, 1) ax2 =fig1.add_subplot(2, 2, 2) ax3 =fig1.add_subplot(2, 2, 3) ax4 =fig1.add_subplot(2, 2, 4) # 调用实例方法在相应的子图中绘图 ax1.plot(randn(30).cumsum(), 'g--') ax2.hist(randn(1000), bins=10, color='k', alpha=0.5) ax3.scatter(np.arange(20), np.arange(20) + randn(20))
绘图结果如下,其中子图4未执行任何绘图命令,所以是空白:

(2)多图形对象放一起,如创建fig1和fig2,每个图形中包含4个子图。
# 创建Figure对象fig1 fig1 = plt.figure() # 在fig1中创建子图形 ax1 =fig1.add_subplot(2, 2, 1) ax2 =fig1.add_subplot(2, 2, 2) ax3 =fig1.add_subplot(2, 2, 3) ax4 =fig1.add_subplot(2, 2, 4) # 调用实例方法在相应的子图中绘图 ax1.plot(randn(30).cumsum(), 'g--') ax2.hist(randn(1000), bins=10, color='k', alpha=0.5) ax3.scatter(np.arange(20), np.arange(20) + randn(20)) # 创建Figure对象fig2 fig2 = plt.figure() # 在fig2中创建子图形 ax1 =fig2.add_subplot(2, 2, 1) ax2 =fig2.add_subplot(2, 2, 2) ax3 =fig2.add_subplot(2, 2, 3) ax4 =fig2.add_subplot(2, 2, 4) # 调用实例方法在相应的子图中绘图 ax1.plot(randn(50).cumsum(), 'r--') ax2.hist(randn(1000), bins=20, color='g', alpha=0.5) ax3.scatter(np.arange(30), np.arange(30) + randn(30))
绘图如下:

二、subplot方法
(1)命令plt.subplot(221),在当前图形对象中创建(2行)*(2列) 的子图结构,并指向第一个子图。
# 创建第一个图形对象 plt.figure(1) # 第一个图形的第一个子图 plt.subplot(221) plt.plot(randn(30).cumsum(), 'g--') # 第一个图形的第二个子图 plt.subplot(222) plt.hist(randn(1000), bins=10, color='k', alpha=0.5) # 第一个图形的第三个子图 plt.subplot(223) plt.scatter(np.arange(20), np.arange(20) + randn(20)) # 第一个图形的第四个子图,不执行任何绘图命令,是空图 plt.subplot(224)
绘图如下:

(2)多图形对象放一起
# 创建第一个图形对象 plt.figure(1) # 第一个图形的第一个子图 plt.subplot(221) plt.plot(randn(30).cumsum(), 'g--') # 第一个图形的第二个子图 plt.subplot(222) plt.hist(randn(1000), bins=10, color='k', alpha=0.5) # 第一个图形的第三个子图 plt.subplot(223) plt.scatter(np.arange(20), np.arange(20) + randn(20)) # 第一个图形的第四个子图 plt.subplot(224) # 创建第二个图形对象 plt.figure(2) # 第二个图形的第一个子图 plt.subplot(221) plt.plot(randn(50).cumsum(), 'r--') # 第二个图形的第二个子图 plt.subplot(222) plt.hist(randn(1000), bins=20, color='g', alpha=0.5) plt.subplot(223) # 第二个图形的第三个子图 plt.scatter(np.arange(30), np.arange(30) + randn(30)) # 第二个图形的第四个子图 plt.subplot(224)
绘图如下:

三、subplots方法
命令fig, axes = plt.subplots(2, 2),创建图形对象fig,及对应的(2行)*(2列) 子图矩阵axes,其中axes[0, 0]代表第一行第一列的子图,以此类推。
fig1, axes1 = plt.subplots(2, 2) axes1[0, 0].plot(randn(30).cumsum(), 'g--') axes1[0, 1].hist(randn(1000), bins=10, color='k', alpha=0.5) axes1[1, 0].scatter(np.arange(20), np.arange(20) + randn(20)) fig2, axes2 = plt.subplots(2, 2) axes2[0, 0].plot(randn(50).cumsum(), 'r--') axes2[0, 1].hist(randn(1000), bins=20, color='g', alpha=0.5) axes2[1, 0].scatter(np.arange(30), np.arange(30) + randn(30))
绘图如下:

四、一个图形对象只包含一个子图的情况
最简洁的方式是直接执行下面的绘图命令,该命令默认创建一个图形对象,同时图形对象只包含一个子图:
plt.plot(randn(30).cumsum(), 'g--')
其等价于以下写法:
plt.figure(1) plt.subplot(111) plt.plot(randn(30).cumsum(), 'g--')
绘图如下:

