Skip to content

掌握 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 → inchw_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 inline

2. 使用 tight layout 时标签被裁剪

解决方法:

plt.tight_layout()

3. 保存图像时尺寸看起来变化了

建议显式设置 DPI:

plt.savefig("output.png", dpi=150)

4. 字体或标签缩放异常

关闭自动布局 / 自动缩放相关选项,例如:

plt.rcParams['figure.autolayout'] = False

5. 多个子图相互遮挡、重叠

增大图像尺寸,例如:

fig, ax = plt.subplots(figsize=(12, 8))

这些排错场景在 Matplotlib 相关搜索中非常常见,也能解决大量用户的使用困惑。


Matplotlib 之外的选择:使用 PyGWalker 进行可视化探索

除了 Matplotlib,你还可以使用 PyGWalker 对 pandas DataFrame 进行可视化探索。它是一个开源的拖拽式数据可视化工具:

PyGWalker for Data visualization (opens in a new tab)

在 Jupyter 中使用:

pip install pygwalker
import pygwalker as pyg
 
gwalker = pyg.walk(df)

也可以在线体验:

Kaggle NotebookGoogle ColabGitHub ⭐
https://www.kaggle.com/asmdef/pygwalker-test (opens in a new tab)https://colab.research.google.com/drive/171QUQeq-uTLgSj1u-P9DQig7Md1kpXQ2 (opens in a new tab)https://github.com/Kanaries/pygwalker (opens in a new tab)

常见问答(FAQ)

  1. 如何在 Matplotlib 中设置图像尺寸?
    使用 figure(figsize=(width, height)),单位为英寸。

  2. 如何调整已经存在的图像的尺寸?
    对已有的 figure 使用 fig.set_size_inches(w, h)

  3. 可以在 Pandas 的图表中修改图像尺寸吗?
    可以,通过 figsize=(w, h) 参数来设置。