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--')

绘图如下: