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

如何获取Matplotlib子图的xlim与ylim并统一行内子图y轴上限?

解决Matplotlib子图行统一Y轴上限问题

错误原因

你用plt.getp(fig1_axs[1, :], 'ylim')触发AttributeError,是因为fig1_axs[1, :]是NumPy数组(包含该行所有子图对象),而plt.getp只能作用于单个Matplotlib Axes对象,无法直接处理数组。

解决方案代码

假设你已经创建了5行3列的子图布局,以下代码可以实现「获取每行子图Y轴上限最大值,统一设置该行所有子图的Y轴上限」:

import matplotlib.pyplot as plt
import numpy as np

# 1. 创建5行3列子图(示例)
fig1, fig1_axs = plt.subplots(5, 3, figsize=(10, 15))
# 给子图填充示例数据(实际替换成你的绘图逻辑)
for i in range(5):
    for j in range(3):
        fig1_axs[i, j].plot(np.random.rand(10) * (i+1))

# 2. 遍历每行子图,统一设置Y轴上限
for row in fig1_axs:
    # 获取该行所有子图的Y轴上限
    row_ymax_values = [ax.get_ylim()[1] for ax in row]
    # 找出该行的最大Y轴上限
    max_row_ymax = max(row_ymax_values)
    # 给该行每个子图设置统一的Y轴上限(保留原Y轴下限)
    for ax in row:
        current_ylim = ax.get_ylim()
        ax.set_ylim(bottom=current_ylim[0], top=max_row_ymax)

plt.tight_layout()
plt.show()

关键逻辑说明

  • row是每行子图的数组,遍历row中的每个ax(单个Axes对象),用get_ylim()获取该子图的Y轴范围(返回(ymin, ymax)元组),取索引1即可得到Y轴上限。
  • 用max()提取该行所有Y轴上限中的最大值。
  • 再次遍历该行子图,用set_ylim()指定bottom保留原Y轴下限,top设为该行的最大Y轴上限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:20:26