Matplotlib中plt.subplots()和plt.figure()的区别
Matplotlib是Python中经典的可视化库,在数据分析和科学计算中得到了广泛应用。在Matplotlib中,常用的绘制图像的函数是plt.subplots()和plt.figure(),但是两者在实际使用中有何区别呢?本文将从以下几个方面来详细讲解这个问题。
阅读更多:Matplotlib 教程
plt.subplots()和plt.figure()的基本概念
首先,我们来看一下plt.subplots()和plt.figure()各自的基本概念。
plt.subplots()函数
plt.subplots()函数是Matplotlib中用于创建并排或垂直排列的多个子图的函数,它的基本用法如下:
fig, axs = plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False)
其中,nrows和ncols参数分别表示子图的行数和列数,sharex和sharey参数则表示是否共享x轴和y轴。函数返回一个Figure对象和Axes对象的数组,我们可以通过数组下标来选择对应的子图。
plt.figure()函数
相比之下,plt.figure()函数是Matplotlib中创建新绘图对象的函数,它实现的功能与plt.subplots()类似,但是只能创建一个画布对象,而不能指定子图的数量和排列方式。plt.figure()的基本用法如下:
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)
其中,figsize参数表示画布的大小,add_subplot()函数则表示向画布中添加子图。这里的111表示只添加一张子图,也可以指定其他的数字。
plt.subplots()和plt.figure()的区别
接下来,我们来具体分析一下plt.subplots()和plt.figure()的区别。
数量和排列方式的不同
在创建图像时,plt.subplots()函数可以指定任意数量的子图和排列方式,比如可以先创建6张子图再按照需要排列,也可以直接按照4×3的矩阵排列,灵活性很高。而plt.figure()函数则只能创建一个画布对象和一个子图,排列方式也固定。
对象引用的不同
plt.subplots()函数返回一个子图数组,我们可以方便地通过引用数组中的子图对象来访问或修改子图属性。而plt.figure()函数只返回一个画布对象,如果需要修改子图属性,则需要通过画布对象的方法来获取或修改子图属性。
plt.subplots()函数的使用场景
plt.subplots()函数特别适合用于创建并排或垂直排列的图像,比如用于显示不同的时间序列数据或多个变量之间的比较等。在下面的示例中,我们使用plt.subplots函数来创建并排或垂直排列的多个子图:
import matplotlib.pyplot as plt
import numpy as np
# 创建一个图像,包含2行3列子图
fig, axs = plt.subplots(nrows=2, ncols=3, figsize=(12, 8))
# 在第一行第一列的子图中绘制sin曲线
x = np.linspace(-1, 1, 100)
y = np.sin(10 * x)
axs[0, 0].plot(x, y)
# 在第一行第二列的子图中绘制cos曲线
y = np.cos(10 * x)
axs[0, 1].plot(x, y)
# 在第一行第三列的子图中绘制tan曲线
y = np.tan(10 * x)
axs[0, 2].plot(x, y)
# 在第二行第一列的子图中绘制cot曲线
y = 1.0 / np.tan(10 * x)
axs[1, 0].plot(x, y)
# 在第二行第二列的子图中绘制cosec曲线
y =1.0 / np.sin(10 * x)
axs[1, 1].plot(x, y)
# 在第二行第三列的子图中绘制sec曲线
y = 1.0 / np.cos(10 * x)
axs[1, 2].plot(x, y)
# 显示图像
plt.show()
plt.figure()函数的使用场景
plt.figure()函数适合用于创建单张图像,比如某个变量的分布直方图或关系散点图等。在下面的示例中,我们使用plt.figure函数来创建单张图像:
import matplotlib.pyplot as plt
import numpy as np
# 创建一个画布对象
fig = plt.figure(figsize=(8, 6))
# 在画布中添加子图并绘制分布直方图
x = np.random.normal(0, 1, 100)
ax = fig.add_subplot(111)
ax.hist(x, bins=20)
# 显示图像
plt.show()
总结
综上所述,Matplotlib中的plt.subplots()函数和plt.figure()函数虽然功能类似,但其实也存在一些明显的差异。在选用函数时,我们需要根据具体情况和需求进行选择,以便最好的实现对图像的绘制和处理。
极客教程