如何获取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
相关产品推荐
相关产品推荐

