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

如何将字符串转为已存在数组名?批量绘制数组数据的实现方案

批量绘制多场景多区域pCO₂时间序列图的解决方案

问题背景

已生成分场景(e、calc、p)和分区域(hilat、lolat、deep)的pCO₂数组(如e_hilat['pCO2']、calc_lolat['pCO2']),以及对应场景的时间数组(e_time、calc_time、p_time)。需要批量绘制每个区域+场景组合的时间-pCO₂关系图,避免重复编写绘图代码;同时要求每个区域对应固定颜色,每个场景对应固定线型。此前尝试通过字符串拼接生成数组名的方式失败,因为拼接结果是字符串而非实际数组对象。

解决方案:用字典映射替代字符串拼接

直接通过字符串解析变量名(如eval)存在安全风险且代码可读性差,推荐用字典映射的方式管理场景和区域数据,实现批量绘图:

步骤1:构建数据映射字典

先把所有场景的区域数据和时间数据整理到字典中,方便循环调用:

# 构建场景-区域数据映射
scenario_data = {
    'e': {'hilat': e_hilat, 'lolat': e_lolat, 'deep': e_deep, 'time': e_time},
    'calc': {'hilat': calc_hilat, 'lolat': calc_lolat, 'deep': calc_deep, 'time': calc_time},
    'p': {'hilat': p_hilat, 'lolat': p_lolat, 'deep': p_deep, 'time': p_time}
}

# 定义区域-颜色映射(固定每个区域的颜色)
region_color_map = {
    'hilat': 'C0',
    'lolat': 'C1',
    'deep': 'C2'
}

# 定义场景-线型映射(固定每个场景的线型)
scenario_ls_map = {
    'e': '-',
    'calc': '--',
    'p': ':'
}

步骤2:批量绘图循环

利用嵌套循环遍历场景和区域,从字典中直接取出对应的时间数组和pCO₂数据,完成绘图:

import matplotlib.pyplot as plt

fig, axS = plt.subplot_mosaic([['a)', 'a)'], ['b)', 'b)']], figsize=(10, 10), sharex=True)

# 遍历每个场景
for scenario_name, scenario_content in scenario_data.items():
    # 遍历每个区域
    for region_name, region_data in scenario_content.items():
        # 跳过time字段,只处理区域数据
        if region_name == 'time':
            continue
        # 获取当前场景的时间数组、当前区域的pCO₂数据
        time_data = scenario_content['time']
        pco2_data = region_data['pCO2']
        # 绘制曲线
        axS['a)'].plot(
            time_data, 
            pco2_data, 
            ls=scenario_ls_map[scenario_name], 
            c=region_color_map[region_name],
            label=f'{scenario_name} - {region_name}'
        )

# 添加图例和标签
axS['a)'].legend()
axS['a)'].set_ylabel('pCO₂')
axS['a)'].set_xlabel('Time')
plt.show()

补充说明

  • 如果所有场景共用同一组时间数组(而非每个场景单独的e_time等),直接把time_data替换成统一的time变量即可。
  • 代码中label字段用于区分不同场景和区域的曲线,可根据需求调整格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:25