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

如何通过循环遍历时间为6张子图填充对应数据?

批量绘制多子图时间步数据的解决方案

你的重复代码确实冗余,问题出在尝试的循环逻辑没把子图和对应时间步一一配对,而且没处理plt.subplots(2,3)返回的二维axes数组。下面是正确的实现方式:

关键问题修正

  1. plt.subplots(2,3)返回的axes是二维数组(2行3列),需要用flatten()转成一维列表,方便按顺序遍历
  2. 原循环把同一个时间步画到所有子图,应该让每个子图对应唯一的时间步
  3. 变量名错误:原代码里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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:31