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

Matplotlib保存图像仅截断Y轴刻度/数值的问题排查

问题解决方案

核心问题

你的代码混用了Matplotlib的pyplot全局接口(plt.xxx)和面向对象子图接口(ax.xxx),这会导致坐标轴设置混乱——plt的函数只会作用于当前激活的子图,而非你目标的子图,进而出现Y轴刻度截断、X轴刻度未显示到900的问题。

修正后的代码示例

import matplotlib.pyplot as plt
import numpy as np
import os

fig = plt.figure(figsize=(30,15))
ax1 = fig.add_subplot(121)
# 修正笔误:用ax1.plot而非ax1.plt
ax1.plot(....)
# 子图专属设置改用ax1.set_xxx接口
ax1.set_xlabel(...)
ax1.set_ylabel(...)
ax1.set_xlim(...)
ax1.set_ylim(...)
# 确保X轴刻度包含900:np.arange是左闭右开区间,终点需设为901
ax1.set_xticks(np.arange(0, 901, 100))
ax1.set_yticks(np.arange(...))
ax1.tick_params(axis='both', which='major', labelsize=12)
ax1.grid(visible=True, which='major', axis='both')

ax2 = fig.add_subplot(122)
ax2.plot(....)
ax2.set_xlabel(...)
ax2.set_xlim(...)
ax2.set_ylim(...)
ax2.set_xticks(np.arange(0, 901, 100))
ax2.set_yticks(np.arange(...))
ax2.tick_params(axis='both', which='major', labelsize=12)
ax2.grid(visible=True, which='major', axis='both')

# 全局标题和底部文字放在所有子图设置完成后配置
plt.suptitle(...)
plt.figtext(0.415, 0.04, "...")
plt.figtext(0.19, 0.04, "...")
plt.figtext(0.84, 0.04, "...")
plt.figtext(0.6125, 0.04, "...")

# 调整布局,给全局标题预留顶部空间,避免坐标轴被截断
plt.tight_layout(rect=[0, 0.03, 1, 0.95])

# 最后执行保存操作
plt.savefig(os.path.join(parentDirectory, "123.png"), bbox_inches='tight', dpi=150)

关键修改说明

  1. 统一使用面向对象接口:所有针对单个子图的设置(坐标轴标签、刻度、范围等)都用ax.set_xxx或ax.xxx,避免plt.xxx的全局干扰,确保每个子图的设置精准生效。
  2. 修正np.arange区间:np.arange(start, stop, step)是左闭右开区间,要显示到900,需将stop设为901,否则900不会被包含在刻度中。
  3. 正确调用布局调整:tight_layout()需在所有子图和全局元素(标题、figtext)设置完成后调用,rect参数调整上下边距,避免标题或底部文字遮挡坐标轴刻度。
  4. 修正函数调用笔误:代码中ax1.plt(....)是错误写法,应为ax1.plot(....)。

补充说明

plt.show()看起来正常是因为Matplotlib会为交互式窗口自动调整布局,但保存图片时必须手动完成布局优化,不能依赖自动调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:35:22