You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅裁剪Matplotlib图表上下空白并保持指定宽度?

解决Matplotlib仅裁剪上下空白并固定宽度的问题

要实现只裁剪图表顶部和底部空白、同时保持宽度与figsize设置的6英寸一致,可通过以下两种方法实现:

方法1:自定义裁剪区域固定宽度

手动构造裁剪框,锁定左右边界以保持6英寸宽度,仅根据轴的实际高度调整上下边界:

import numpy as np
from matplotlib import pyplot as plt

# 创建画布,固定宽度6英寸
fig, ax = plt.subplots(constrained_layout=True, figsize=(6, 10))
ax.imshow(np.zeros((1000, 1000)))

# 获取轴的实际占比(图形坐标,0-1范围)
bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
# 固定宽度为6英寸,计算对应的图形坐标右边界
target_width_ratio = 6 / fig.get_figwidth()
# 构造裁剪框:左0,右为固定宽度比例,上下取轴的实际位置
crop_bbox = [0, bbox.y0, target_width_ratio, bbox.y0 + bbox.height]

plt.savefig('short_plot.png', dpi=100, bbox_inches=crop_bbox, pad_inches=0)
plt.close()

方法2:结合tight_layout与轴边界裁剪

关闭constrained_layout,用tight_layout自动调整间距后,直接指定裁剪框的左右为0到6英寸,上下取轴的实际范围:

import numpy as np
from matplotlib import pyplot as plt

fig, ax = plt.subplots(figsize=(6, 10))
ax.imshow(np.zeros((1000, 1000)))
plt.tight_layout(pad=0)  # 自动消除不必要的内边距

# 获取轴的实际边界
bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
# 直接指定裁剪框的宽度为6英寸,高度适配轴的实际高度
plt.savefig('short_plot.png', dpi=100, bbox_inches=(0, bbox.y0, 6, bbox.y0 + bbox.height), pad_inches=0)
plt.close()

这两种方法都能保证保存后的图表宽度严格为6英寸,同时自动裁剪掉顶部和底部的多余空白,高度适配图表内容的实际尺寸。

内容的提问来源于stack exchange,提问作者user3549378

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:03:18