当我们需要在一个图形中绘制多个子图时,可以使用Python Matplotlib库通过plt.subplots创建子绘图。
创建子图
我们首先需要导入Matplotlib库:
import matplotlib.pyplot as plt
然后,使用plt.subplots()函数创建一个新的图形和子图:
fig, ax = plt.subplots()
通过这个语句,我们会得到一个新的图形和一个子图ax
。
如果我们需要在同一个图形中创建多个子图,我们可以使用plt.subplots()
函数的nrows
和ncols
参数来指定需要的子图数和子图的排列方式。例如:
fig, axs = plt.subplots(nrows=2, ncols=2)
这样,我们会得到一个2x2个子图的图形和一个子图数组axs
。
绘制图形
得到了子图后,我们就可以像绘制普通图形一样 ax.plot()
或 ax.scatter()
来在子图上绘制图形。
例如,我们可以在第一个子图中绘制一条sin函数曲线,和一些随机点:
import numpy as np
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
axs[0, 0].plot(x, y)
axs[0, 0].scatter(np.random.rand(10), np.random.rand(10))
需要注意的是,绘制函数的参数是对应子图的对象而不是整个图形对象。比如,我们需要在第一个子图中绘制图形,需要使用axs[0, 0]
代表第一个子图。
我们还可以为每个子图设置图形属性,例如子图的标题、坐标轴标签等。例如:
axs[0, 0].set_title('sin(x)')
axs[0, 0].set_xlabel('x')
axs[0, 0].set_ylabel('y')
这会设置第一个子图的标题为sin(x)
,x轴标签为x
,y轴标签为y
。
示例
以下是一个绘制多个子图的完整示例:
import numpy as np
import matplotlib.pyplot as plt
# 创建一个2x2个子图的图形
fig, axs = plt.subplots(nrows=2, ncols=2)
# 在第一个子图中绘制sin函数
x = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
axs[0, 0].plot(x, y)
axs[0, 0].set_title('sin(x)')
axs[0, 0].set_xlabel('x')
axs[0, 0].set_ylabel('y')
# 在第二个子图中绘制cos函数
y = np.cos(x)
axs[0, 1].plot(x, y)
axs[0, 1].set_title('cos(x)')
axs[0, 1].set_xlabel('x')
axs[0, 1].set_ylabel('y')
# 在第三个子图中绘制随机点
axs[1, 0].scatter(np.random.rand(10), np.random.rand(10))
axs[1, 0].set_title('random points')
axs[1, 0].set_xlabel('x')
axs[1, 0].set_ylabel('y')
# 在第四个子图中绘制正态分布
x = np.linspace(-5, 5, 100)
y = 1/(np.sqrt(2*np.pi)) * np.exp(-0.5 * x**2)
axs[1, 1].plot(x, y)
axs[1, 1].set_title('normal distribution')
axs[1, 1].set_xlabel('x')
axs[1, 1].set_ylabel('y')
plt.show()
这个例子中,我们同时绘制了四个子图,包括sin函数曲线、cos函数曲线、随机点和正态分布曲线。每个子图都有自己的标题和坐标轴标签。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Matplotlib通过plt.subplots创建子绘图 - Python技术站