Python Matplotlib设置含标题轴标签的输出jpg文件宽高比
问题根因
你遇到的宽高比异常由两个配置错误导致:
plt.savefig中使用的bbox_inches="tight"参数会自动根据图表内容裁剪/扩展输出边界,直接忽略预设的画布尺寸,是核心诱因。- 代码中用
ax = fig.add_axes([0,0,1,1])将坐标轴完全撑满整个画布,标题会超出画布边界,触发tight参数自动扩展画布高度,进一步拉低了宽高比。
解决方案
- 第一步:删除
savefig中的bbox_inches="tight"参数,禁止自动调整画布边界。 - 第二步:手动调整坐标轴的占比,给标题、坐标轴刻度/标签预留足够的边距,确保所有内容都在预设的画布范围内,不需要额外裁剪调整。
修改后可运行代码
import matplotlib.pyplot as plt # 按目标尺寸设置画布大小,单位为英寸 fig = plt.figure(figsize=[320/25.4, 70/25.4]) # 四个参数对应[左边界位置, 下边界位置, 坐标轴宽度, 坐标轴高度],取值范围0-1,可根据显示效果微调 ax = fig.add_axes([0.08, 0.15, 0.88, 0.72]) langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] ax.bar(langs,students) ax.set_title('Title', loc='left', fontdict=dict(fontsize=20, fontweight='bold')) # 不添加自动调整参数,直接按预设尺寸保存 plt.savefig('example.jpg', dpi=150)
验证说明
上述代码输出的图片尺寸严格对应320mm×70mm,dpi=150时像素约为1890px×413px,宽高比≈4.57,完全符合要求。如果后续需要添加坐标轴标签、调整刻度大小,只需微调add_axes的四个边距参数即可,无需修改画布尺寸配置。
内容的提问来源于stack exchange,提问作者Barione
相关产品推荐
相关产品推荐

