matplotlib——图形对象figure及区域对象axe

本文详细介绍了使用Matplotlib库创建图形对象的方法,并演示了如何通过不同的函数如add_axes(), subplot() 和 subplots()来绘制多子图。文章还提供了具体的代码实例,帮助读者更好地理解和掌握这些绘图技巧。

创建图形对象

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(-10, 10)
y = x**2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbLgWBVw-1648631193275)(attachment:image.png)]

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 从画布起始位置绘制,宽度和高度与画布一致
ax1 = fig.add_axes([0, 0, 1, 1])

# ax2 从画布 20% 的位置开始绘制,宽度和高度是画布的 50% 
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')

在这里插入图片描述

# 创建 2行2列的子图,返回图形对象(画布),所有子图的区域
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))

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值