如何更改Matplotlib绘制图形的大小

如何更改Matplotlib绘制图形的大小

技术背景

在数据可视化过程中,我们经常需要调整图形的大小以满足不同的需求,如在报告中展示、在网页上嵌入等。Matplotlib 是 Python 中常用的绘图库,它提供了多种方法来更改图形的大小。

实现步骤

创建图形时指定大小

可以在创建图形时通过 figsize 参数指定图形的大小,单位为英寸。示例代码如下:

1
2
3
from matplotlib.pyplot import figure

figure(figsize=(8, 6), dpi=80)

这里创建了一个宽 8 英寸、高 6 英寸的图形,dpi 参数指定了每英寸的点数,默认为 80。

更改已创建图形的大小

如果已经创建了图形,可以使用 figure.set_size_inches 方法来调整图形大小:

1
2
3
4
5
import matplotlib.pyplot as plt

fig = plt.gcf() # 获取当前图形
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

若要将大小更改传播到现有的 GUI 窗口,可添加 forward=True

1
fig.set_size_inches(18.5, 10.5, forward=True)

使用 plt.rcParams 更改默认大小

如果想在不使用图形环境的情况下更改大小,可以使用 plt.rcParams。示例如下:

1
2
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20, 3)

若要将全局图形大小重置为默认值,可使用:

1
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]

在 Pandas 中更改图形大小

在 Pandas 中绘制图形时,可以通过 figsize 参数指定图形大小:

1
2
3
4
5
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'some_column': [1, 2, 3, 4, 5]})
df['some_column'].plot(figsize=(10, 5))

也可以使用现有的图形或坐标轴:

1
2
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)

若要更改默认设置,可以使用:

1
2
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))

核心代码

按比例更改图形大小

1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt

# 这里放你的代码

fig_size = plt.gcf().get_size_inches() # 获取当前大小
sizefactor = 0.8 # 设置缩放因子
# 按因子修改当前大小
plt.gcf().set_size_inches(sizefactor * fig_size)

设置图形的纵横比

1
2
3
4
5
6
import matplotlib.pyplot as plt

# 使图像宽度是高度的 3 倍
fix, ax = plt.subplots(figsize=plt.figaspect(1/3))
plt.title("I'm 3x as wide as I am tall")
plt.show()

通过更改 dpi 缩放图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt

data = [3, 5, 1, 7, 6, 7, 2]

# 方法 1a
plt.figure(dpi=50)
plt.plot(data)

# 方法 1b
fig, ax = plt.subplots(dpi=50)
ax.plot(data)

# 方法 2
plt.plot(data)
plt.gcf().set_dpi(50)

最佳实践

  • 对于临时更改图形大小,建议使用 figsize 参数或 set_size_inches 方法。
  • 对于全局更改图形大小,可使用 plt.rcParams 或自定义样式表。
  • 在调整图形大小时,可结合 plt.tight_layout 方法去除图形周围的空白。

常见问题

更改图形大小后字体和线条大小未按预期缩放

可以通过更改 dpi 来按比例缩放图形中的所有元素。示例如下:

1
2
3
4
5
import matplotlib.pyplot as plt

data = [3, 5, 1, 7, 6, 7, 2]
plt.figure(dpi=50)
plt.plot(data)

SVG 图像无法设置指定大小

SVG 是矢量格式,理论上可以无损缩放。可以使用 Inkscape 等工具将 SVG 转换为固定大小的 PNG 图像:

1
inkscape -h 431 get_size_svg.svg -b FFF -e get_size_svg.png

调整图形大小后标签被截断

可以使用 plt.tight_layout 方法去除图形周围的空白,避免标签被截断:

1
2
3
4
import matplotlib.pyplot as plt

plt.tight_layout(pad=1)
plt.savefig('example.png')

如何更改Matplotlib绘制图形的大小
https://119291.xyz/posts/2025-05-09.how-to-change-matplotlib-figure-size/
作者
ww
发布于
2025年5月9日
许可协议