掌握 Matplotlib 图像尺寸:完整指南
Updated on
在 Matplotlib 中,控制**图像尺寸(figure size)**是创建干净、易读、且适合出版的可视化图表时最重要的环节之一。无论你是在做快速探索性分析,还是为报告准备精美图形,只要正确掌握图像尺寸的设置和调整,就能避免图表变形、标签难以阅读、布局不统一等问题。
本文覆盖在 Matplotlib 中控制图像尺寸的所有常见且实用的方法,包括:
- 在创建新图像时使用
figsize - 调整已存在图像的尺寸
- 使用
rcParams设置全局默认尺寸 - 以厘米为单位设置图像尺寸
- 在 Pandas 图表中改变尺寸
- 重置和动态修改全局尺寸
- 常见问题排查指南
- 所有方法的对比总结表
⭐ 快速参考(TL;DR)
| 任务 | 最佳方法 | 示例 |
|---|---|---|
| 为新图像设定尺寸 | plt.figure(figsize=(w, h)) | plt.figure(figsize=(8, 6)) |
| 修改已有图像尺寸 | fig.set_size_inches(w, h) | fig.set_size_inches(12, 4) |
| 设置全局默认尺寸 | plt.rcParams["figure.figsize"] = ... | (12, 6) |
| 在 Pandas 图中设定尺寸 | df.plot(figsize=(w, h)) | (10, 5) |
| 使用厘米单位 | 先将 cm → inch | w_cm / 2.54 |
理解 Matplotlib 中的图像尺寸
Matplotlib 使用**英寸(inches)**来衡量图像尺寸,采用 (width, height) 的元组形式。
创建固定尺寸图像的最直接方式是:
from matplotlib.pyplot import figure
# Create a new figure (width=8 inches, height=6 inches)
figure(figsize=(8, 6))这样可以确保你的图表使用你指定的尺寸,而不受数据集或图表类型的影响。
在图像创建之后调整尺寸
有时图像是自动创建的——例如通过 plt.plot() 或 Pandas 的绘图接口。这种情况下你仍然可以在之后调整图像尺寸:
import matplotlib.pyplot as plt
# Get the current figure
fig = plt.gcf()
# Change its size to 18.5 x 10.5 inches
fig.set_size_inches(18.5, 10.5)
# Save the resized figure
fig.savefig("figure.png", dpi=100)在图像已经存在之后,set_size_inches() 是最可靠的尺寸调整方法。
使用 rcParams 设置全局默认图像尺寸
如果你希望所有绘图都使用相同的尺寸(在 notebook 和脚本中都很有用),可以设置全局默认值:
import matplotlib.pyplot as plt
# Make all future figures 20 x 3 inches
plt.rcParams["figure.figsize"] = (20, 3)这会影响之后创建的所有图像,直到被再次修改为止。
以厘米为单位设置图像尺寸
如果你需要使用公制单位(比如投稿论文),可以先将厘米转为英寸:
width_cm = 20
height_cm = 10
# Convert cm to inches
width_in = width_cm / 2.54
height_in = height_cm / 2.54
# Use the converted size
figure(figsize=(width_in, height_in))这一做法与直接使用英寸完全一致,只是多了一个单位换算。
重置或动态修改全局默认尺寸
要恢复 Matplotlib 的原始默认设置,可以这样做:
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]当一个 notebook 中既有小的快速图,又有大的出版级图表时,这个方法尤其有用。
在 Pandas 中控制图像尺寸
Pandas 直接集成了 Matplotlib,同样支持 figsize 参数:
df['some_column'].plot(figsize=(10, 5))结合子图使用时:
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)这种方式在数据分析 notebook 中非常方便。
为所有图表修改 Matplotlib 的默认尺寸
如果你希望每一个图表都自动使用统一尺寸,可以使用:
import matplotlib
matplotlib.rc("figure", figsize=(10, 5))这与直接修改 rcParams 类似,并且可用于脚本和 notebook 的统一配置。
🔍 各种方法对比
| 方法 | 适用场景 | 说明 |
|---|---|---|
figure(figsize=...) | 创建全新的图像 | 最推荐的基础用法 |
set_size_inches() | 调整已存在的图像尺寸 | 适合自动生成图像的场景 |
plt.rcParams["figure.figsize"] | 在 notebook 中设置全局默认尺寸 | EDA(探索性分析)中最常见 |
matplotlib.rc("figure", figsize=...) | 在脚本中设置全局默认尺寸 | 适合生产环境和统一风格的项目 |
| 厘米单位转换 | 满足学术期刊 / 出版方的尺寸规范 | 常用于 LaTeX 论文 |
df.plot(figsize=...) | 基于 Pandas 的数据分析工作流 | 适合快速 EDA 与试验性绘图 |
⚠️ 常见问题排查:当 figsize 看起来“不起作用”时
1. Jupyter Notebook 中 figsize 被忽略
解决方法:
%matplotlib inline2. 使用 tight layout 时标签被裁剪
解决方法:
plt.tight_layout()3. 保存图像时尺寸看起来变化了
建议显式设置 DPI:
plt.savefig("output.png", dpi=150)4. 字体或标签缩放异常
关闭自动布局 / 自动缩放相关选项,例如:
plt.rcParams['figure.autolayout'] = False5. 多个子图相互遮挡、重叠
增大图像尺寸,例如:
fig, ax = plt.subplots(figsize=(12, 8))这些排错场景在 Matplotlib 相关搜索中非常常见,也能解决大量用户的使用困惑。
Matplotlib 之外的选择:使用 PyGWalker 进行可视化探索
除了 Matplotlib,你还可以使用 PyGWalker 对 pandas DataFrame 进行可视化探索。它是一个开源的拖拽式数据可视化工具:
在 Jupyter 中使用:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)也可以在线体验:
常见问答(FAQ)
-
如何在 Matplotlib 中设置图像尺寸?
使用figure(figsize=(width, height)),单位为英寸。 -
如何调整已经存在的图像的尺寸?
对已有的 figure 使用fig.set_size_inches(w, h)。 -
可以在 Pandas 的图表中修改图像尺寸吗?
可以,通过figsize=(w, h)参数来设置。
