week4-1-figure画布

一、Matplotlib 画布 Figure

Figure(画布):最外层容器,相当于画纸 ,承载所有子图 Axes、标题、图例。一张画布可以放多个子图(Axes)。

Axes:绘图区域(子图),真正画折线 / 柱状 / 饼图的地方,一张画布可以有多个 Axes。

plt.figure () 常用参数

参数 含义
figsize=(宽,高) 画布大小,单位:英寸,例figsize=(8,4)
facecolor 画布背景色(整个画纸底色)
dpi 分辨率,数值越大图片越清晰,保存图片生效

画布常用方法(fig 对象调用)

  1. fig.savefig("test.png"):保存整张画布图片
  2. fig.suptitle("总标题"):画布最上方大标题(全局标题,区别 ax.set_title 子图标题)
  3. fig.add_subplot(行,列,序号):在画布新增绘图区域
  4. fig.add_axes([left,bottom,width,height]):自定义位置添加子图

核心概念区分(高频考题)

  1. Figure 画布:整张画纸,可以放多张图,设置画布背景、总标题、保存图片
  2. Axes 子图 / 坐标系:画纸上一小块绘图区域,ax.plot/ax.bar/ax.pie 都画在 Axes 上
  3. Axis:坐标轴(x 轴、y 轴刻度),属于 Axes 内部

一句话记忆:Figure 是画布(画纸),Axes 是画纸上的一个个绘图框

创建画布

python 复制代码
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 1. 创建画布 Figure
fig = plt.figure(figsize=(8, 6), facecolor="#f6f6f6", dpi=100)

# 2. 用 add_axes 创建多个子图(自定义位置和大小)
# [左, 下, 宽度, 高度]
ax1 = fig.add_axes([0.1, 0.55, 0.35, 0.35])
ax2 = fig.add_axes([0.55, 0.55, 0.35, 0.35])
ax3 = fig.add_axes([0.3, 0.1, 0.4, 0.35])

# 在各个axes绘图
ax1.plot([1,2,3],[2,5,3])
ax1.set_title("子图1:折线图")

ax2.bar(["A","B","C"],[12,25,18])
ax2.set_title("子图2:柱状图")

ax3.pie([30,40,30], autopct="%1.0f%%")
ax3.set_title("子图3:饼图")

# 画布总标题
fig.suptitle("画布 + add_axes自定义子图", fontsize=16)

plt.show()

二、Figure 与 Axes(核心考点)

一句话区分

  • Figure:画布(画纸),最外层容器,可以包含多个绘图区域
  • Axes:子图 / 坐标系,画纸上一块独立绘图区域,真正画图(plot/bar/pie)都画在 Axes 上

注意区分:Axes(绘图区)≠ Axis(坐标轴,x/y 轴刻度)

Axes 常用属性 / 方法(绘图区域)

项目 作用
ax.plot() / ax.bar() / ax.pie() 在该区域绘图
ax.set_title() 子图标题
ax.set_xlabel() / ax.set_ylabel() 设置 x、y 轴标签
ax.set_xlim() / ax.set_ylim() 设置坐标轴范围
ax.legend() 添加图例

高频考点对比表

对象 中文名称 核心功能 标题方法
Figure 画布 承载所有子图,设置整张图片属性 fig.suptitle()
Axes 子图 / 坐标系 绘图、设置坐标轴、子图样式 ax.set_title()

易混易错

  1. fig.suptitle():整张画布大标题;ax.set_title():单个子图标题,考试必考
  2. 一个 Figure 可以包含多个 Axes;一个 Axes 只能属于一个 Figure
  3. plt.subplots() 返回 (fig,ax),第一个返回值是画布,第二个是子图
python 复制代码
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 1. 创建画布Figure
fig = plt.figure(figsize=(10, 7), facecolor="#f7f9fc", dpi=100)

# 2. 创建多个Axes绘图区(全部用add_axes)
ax1 = fig.add_axes([0.05, 0.55, 0.42, 0.4])  #左,下,宽,高
ax2 = fig.add_axes([0.53, 0.55, 0.42, 0.4])
ax3 = fig.add_axes([0.05, 0.08, 0.42, 0.4])
ax4 = fig.add_axes([0.53, 0.08, 0.42, 0.4])

# 在每个Axes绘图
ax1.plot([1,2,3,4], [2,4,1,3], color="#2E86AB", linewidth=2)
ax1.set_title("子图1 折线图")
ax1.set_xlabel("X轴")
ax1.set_ylabel("Y轴")

ax2.bar(["一季度","二季度","三季度"], [15,22,18], color="#A23B72")
ax2.set_title("子图2 柱状图")

ax3.pie([30,20,40,10], autopct="%1.0f%%", textprops={"fontsize":9})
ax3.set_title("子图3 饼图")

ax4.scatter([1,3,5,7], [4,2,6,3], color="#F18F01", s=60)
ax4.set_title("子图4 散点图")

# 画布总标题
fig.suptitle("使用add_axes创建多Axes多子图", fontsize=16)

plt.show()

参数回顾

add_axes([left, bottom, width, height])

left:子图左边缘 距离画布最左边的比例 bottom:子图下边缘距离画布最底边的比例 width:子图自身宽度(占画布总宽比例) height:子图自身高度(占画布总高比例) 所有数值范围:0~1,画布左下角是坐标原点

4 个子图参数拆解

复制代码
ax1 = fig.add_axes([0.05, 0.55, 0.42, 0.4])
ax2 = fig.add_axes([0.53, 0.55, 0.42, 0.4])
ax3 = fig.add_axes([0.05, 0.08, 0.42, 0.4])
ax4 = fig.add_axes([0.53, 0.08, 0.42, 0.4])

ax1:0.05, 0.55, 0.42, 0.4

  • left=0.05:左边距离画布左边界 5% 画布宽度
  • bottom=0.55:下边距离画布底部 55% 画布高度
  • width=0.42:子图宽度占画布总宽 42%
  • height=0.4:子图高度占画布总高 40% 👉 位置:左上

ax2:0.53, 0.55, 0.42, 0.4

  • left=0.53:左边距离画布左边界 53% 画布宽度
  • bottom=0.55:下边距离画布底部 55% 画布高度(和 ax1 同一水平线)
  • width=0.42,height=0.4,大小和 ax1 完全一样 👉 位置:右上

ax1 最右侧位置:0.05+0.42 = 0.47 ax2 最左侧位置:0.53 中间空隙:0.53 - 0.47 = 0.06(水平间隔 6% 画布宽度)

ax3:0.05, 0.08, 0.42, 0.4

  • left=0.05,和 ax1 对齐
  • bottom=0.08:下边距离画布底部 8% 画布高度
  • width=0.42,height=0.4,大小同 ax1 👉 位置:左下

ax4:0.53, 0.08, 0.42, 0.4

  • left=0.53,和 ax2 对齐
  • bottom=0.08,和 ax3 同一水平线 👉 位置:右下

整体布局总结

2 行 × 2 列 的布局:

  • 第一行(上面两个):ax1 (左上)、ax2 (右上),bottom 都是 0.55,在同一水平高度
  • 第二行(下面两个):ax3 (左下)、ax4 (右下),bottom 都是 0.08,在同一水平高度
  • 四个子图宽高完全相同,水平方向留有间隙,上下两行之间也有空隙。

计算子图顶部坐标 = bottom + height ax1 顶部:0.55+0.4 = 0.95,距离画布顶部还有 0.05(5%)的空白 ax3 顶部:0.08+0.4 = 0.48 两行之间空隙:0.55 - 0.48 = 0.07(7% 画布高度)

可视化简图(文字版)

复制代码
画布顶部
┌────────────┐      ┌────────────┐
│    ax1     │      │    ax2     │
└────────────┘      └────────────┘

┌────────────┐      ┌────────────┐
│    ax3     │      │    ax4     │
└────────────┘      └────────────┘
画布底部

python 复制代码
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 创建画布 Figure
fig = plt.figure(figsize=(7,5),facecolor='#f0f8ff')

# 方式A add_subplot:规则网格创建Axes
ax1 = fig.add_subplot(2,1,1) #2行1列,第1个子图
ax1.plot([1,2,3],[3,1,4])
ax1.set_title("子图1")

# 方式B add_axes:自定义位置创建Axes [left,bottom,w,h]
ax2 = fig.add_axes([0.1,0.1,0.6,0.5])
ax2.bar(["a","b"],[5,8])
ax2.set_title("子图2")

fig.suptitle("画布总标题", fontsize=15)
plt.show()
python 复制代码
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# fig是画布,ax是Axes对象(多个子图返回数组)
fig, ax = plt.subplots(2, 1, figsize=(7,5))
ax[0].plot([1,2,3],[2,4,1])
ax[1].pie([40,60],autopct="%1.0f%%")
fig.suptitle("总标题")
plt.show()
相关推荐
言乐61 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
yl45302 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
笨笨饿2 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
for_ever_love__3 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
打工仔折腾 AI3 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战
I Am a robert girl3 小时前
当传感器学会“说谎“:拆解可靠性门控的稀疏惯性动捕融合
python·姿态估计·传感器融合·惯性动捕·imu传感器·可靠性门控·可穿戴计算
李航19833 小时前
AI定制柜建模,需要详细的建模规范和标准流程
人工智能·python·计算机视觉·ai·ai编程
沙漠之主4 小时前
Python 教学设计资料:从入门到实战的完整课程方案
爬虫·python
ebiobiz5 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
慢云智慧空间5 小时前
从智能终端到空间AI,慢云科技如何重新定义智慧建筑的核心能力?
人工智能·python·科技