如何通过循环遍历时间为6张子图填充对应数据?
批量绘制多子图时间步数据的解决方案
你的重复代码确实冗余,问题出在尝试的循环逻辑没把子图和对应时间步一一配对,而且没处理plt.subplots(2,3)返回的二维axes数组。下面是正确的实现方式:
关键问题修正
plt.subplots(2,3)返回的axes是二维数组(2行3列),需要用flatten()转成一维列表,方便按顺序遍历- 原循环把同一个时间步画到所有子图,应该让每个子图对应唯一的时间步
- 变量名错误:原代码里
axs应该是axes,直接解包二维数组会报错
正确代码示例
import matplotlib.pyplot as plt import numpy as np # 创建2行3列的子图,展平成一维列表 fig, axes = plt.subplots(2, 3, figsize=(12, 8)) ax_list = axes.flatten() # 转成[ax1, ax2, ax3, ax4, ax5, ax6]的一维列表 # 定义要使用的时间步索引(和你原代码的4,8,12,16,20,24对应) time_indices = [4, 8, 12, 16, 20, 24] lw = 1 # 假设你已经定义了linewidth参数 # 同时遍历子图和对应的时间步索引 for ax, idx in zip(ax_list, time_indices): # 提取对应时间步的数据 data = thpert_neg.sel(xh=slice(xstart, xend), yh=slice(ystart, yend), time=times[idx]) # 在当前子图上绘制等值线 ax.contour(data, color='blue', linewidth=lw, levels=np.arange(-1, -0.60, 0.05)) # 给每个子图加标题标注时间步 ax.set_title(f'Time step: {times[idx]}') plt.tight_layout() # 自动调整子图间距 plt.show()
代码解释
axes.flatten():把2x3的二维子图数组转换成6个元素的一维列表,保证顺序和你原代码的ax1到ax6一致zip(ax_list, time_indices):将子图和对应的时间步索引一一配对,确保每个子图只绘制对应时间的数据- 后续要调整时间步或子图数量,只需修改
time_indices或子图行列数即可,无需重复编写绘图代码
内容的提问来源于stack exchange,提问作者franke11
相关产品推荐
相关产品推荐

