创建图形对象
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(-10, 10)
y = x**2
fig = plt.figure('f1', figsize=(6, 4), dpi=50, facecolor='gray', frameon=True)
plt.plot(x, y)
绘制多子图
figure 是绘制对象(可理解为一个空白的画布),一个 figure 对象可以包含多个 Axes 子图,一个 Axes 是一个绘图区域,不加设置时,Axes为1,且每次绘图其实都是在figure上的Axes上绘图。
我们是在图形对象上面的 Axes 区域进行作画
绘制子图的几种方式:
- add.axes() : 添加区域
- subplot() : 均等地划分画布,只是创建一个包含子图区域的画布,(返回区域对象)
- subplots() : 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,(返回图形对象和区域对象)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uiEiLPlJ-1648631193276)(attachment:image.png)]
fig = plt.figure(facecolor='g',figsize=(6, 4), dpi=80)
ax1 = fig.add_axes([0, 0, 1, 1])
ax2 = fig.add_axes([0.2, 0.2, 0.5, 0.5])
ax1.plot(x, y)
ax2.plot(x, y)
注意
只有区域对象才可调用 plot() 方法,图形对象是不可以调用的。 但是plt.plot() 却不会报错,是因为 plt 默认返回的是一个区域,验证一下。
fig = plt.figure()
ax1 = fig.add_axes([0, 0, 1, 1])
ax2 = fig.add_axes([0.2, 0.2, 0.5, 0.5])
plt.plot(x, y, color='g')
plt.plot(x, x, color='r')
plt.plot(x, 2*x, color='b')
若在 ax2 后面调用plt.plot() 会默认返回 ax2 区域
fig = plt.figure()
ax1 = fig.add_axes([0, 0, 1, 1])
plt.plot(x, y, color='g')
plt.plot(x, x, color='r')
ax2 = fig.add_axes([0.2, 0.2, 0.5, 0.5])
plt.plot(x, 2*x, color='b')
fig, axes = plt.subplots(2, 2)
x = np.arange(-2, 5)
ax1 = axes[0][0]
ax1.plot(x, x**2)
ax1.set_title('square')
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title('sqrt')
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title('exp')
axes[1][1].plot(x, np.log10(x))
axes[1][1].set_title('log10')
plt.tight_layout()
C:\Users\11434\AppData\Local\Temp/ipykernel_13664/2890334170.py:9: RuntimeWarning: invalid value encountered in sqrt
axes[0][1].plot(x, np.sqrt(x))
C:\Users\11434\AppData\Local\Temp/ipykernel_13664/2890334170.py:15: RuntimeWarning: divide by zero encountered in log10
axes[1][1].plot(x, np.log10(x))
C:\Users\11434\AppData\Local\Temp/ipykernel_13664/2890334170.py:15: RuntimeWarning: invalid value encountered in log10
axes[1][1].plot(x, np.log10(x))
|