如何更改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
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]
plt.figure(dpi=50) plt.plot(data)
fig, ax = plt.subplots(dpi=50) ax.plot(data)
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')
|