Matplotlib 图表显示比例控制笔记

1. 基础概念

1.1 画布(Figure)和绘图区(Axes)

  • 画布(Figure) : 整个图像的容器,通过figsize控制物理尺寸
  • 绘图区(Axes): 实际绘图的区域,包含坐标轴和数据
python 复制代码
# 创建画布
fig = plt.figure(figsize=(8, 8))  # 8×8英寸的正方形画布

1.2 绘图区域布局

使用add_axes()方法控制绘图区在画布中的位置和大小:

python 复制代码
ax = fig.add_axes([left, bottom, width, height])
  • 所有参数取值范围为0-1,表示相对于画布的比例
  • 示例:[0.15, 0.15, 0.75, 0.75]
    • left: 左边距占15%
    • bottom: 底部边距占15%
    • width: 绘图区宽度占75%
    • height: 绘图区高度占75%

2. 控制坐标轴比例的方法

2.1 基于数据单位的比例控制

python 复制代码
ax.set_aspect('equal')  # 使x轴和y轴的数据单位比例为1:1
  • 适用场景:
    • 散点图中需要保持x和y轴的物理单位一致
    • 绘制几何图形时需要保持形状不变形

2.2 基于显示区域的比例控制

python 复制代码
ax.set_box_aspect(1)  # 使绘图区域呈现正方形
  • 适用场景:
    • x轴和y轴数值范围差异较大
    • 需要控制显示区域的视觉比例
    • 损失曲线、统计图表等

3. 完整示例代码

python 复制代码
import matplotlib.pyplot as plt

# 1. 创建画布
fig = plt.figure(figsize=(8, 8))

# 2. 创建绘图区域并控制位置
ax = fig.add_axes([0.15, 0.15, 0.75, 0.75])

# 3. 绘制数据
ax.plot(x, y)

# 4. 设置绘图区域比例
ax.set_box_aspect(1)  # 保持显示区域为正方形

# 5. 保存图片
plt.savefig('output.png', dpi=300, bbox_inches='tight')

4. 常见应用场景与建议

4.1 不同类型图表的推荐设置

  • 损失曲线 : 使用set_box_aspect(1)
  • 散点图 : 根据数据特点选择set_aspect('equal')set_box_aspect(1)
  • 统计图表 : 通常使用set_box_aspect()控制显示比例

4.2 调整技巧

  • 边距调整:通过add_axes()的参数微调
  • 分辨率:保存时使用dpi参数控制
  • 标题和标签:根据比例调整pad值避免重叠

4.3 注意事项

  • set_aspect('equal')可能导致数值范围差异大的图表变形
  • bbox_inches='tight'可能影响预设的显示比例
  • 添加标题或标签时需要预留足够边距
相关推荐
weixin_4440129324 分钟前
PHP 中逻辑或(--)运算符的正确使用与条件逻辑重构指南
jvm·数据库·python
iAm_Ike6 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt6 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
旦莫7 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
知识领航员8 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
如何原谅奋力过但无声10 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表
deephub10 小时前
2026 RAG 选型指南:Vector、Graph、Vectorless 该怎么挑
人工智能·python·大语言模型·rag
狐狐生风12 小时前
使用 UV 创建并运行 Python 项目(完整步骤)
python·uv
噜噜噜阿鲁~12 小时前
python学习笔记 | 9.2、模块-安装第三方模块
笔记·python·学习
现代野蛮人12 小时前
【深度学习】 —— VGG-16 网络实现猫狗识别
网络·人工智能·python·深度学习·tensorflow