You need to enable JavaScript to run this app. Python Matplotlib 多系外行星模拟数据文件读取与子图生成实现
优惠活动
大模型
产品
解决方案
定价
更多

Python Matplotlib 多系外行星模拟数据文件读取与子图生成实现

多文件批量读取与Matplotlib子图生成实现方案
  • 适配前提:所有待读取文件格式与原单文件处理脚本完全一致,第1列为时间(单位:年,范围0-100万年)、第8列为全球温度,所有文件的时间列数据完全统一,仅温度数值随模拟参数变化
  • 核心实现逻辑:
    • 复用原有脚本的逐行分割、指定列读取的解析规则,不改动原有数据提取逻辑
    • 基于os模块实现目标文件夹下同类型文件的自动遍历,无需硬编码单文件路径
    • 自动生成网格布局子图,统一X轴范围与刻度,避免不同子图坐标轴错位
import os
import matplotlib.pyplot as plt

# -------------------------- 用户可自定义配置项 --------------------------
# 存放所有模拟输出文件的根文件夹路径
data_folder = r"C:\Users\sasuk\OneDrive\Desktop\GJ 229 Planet Data\Gj 229 b - [SemiMajor 0.867][Ecc][Mass][Luminosity]"
# 匹配同格式模拟文件的后缀(与现有文件的后缀保持一致)
match_suffix = ".forward"
# 子图网格布局(根据待处理文件总数调整,比如处理4个文件就设为2行2列)
subplot_grid = (2, 2)
# X轴时间范围(匹配0-100万年的模拟区间)
x_range = (0, 1_000_000)
# ------------------------------------------------------------------------

# 遍历收集所有符合规则的文件路径
file_list = []
for _, _, file_names in os.walk(data_folder):
    for name in file_names:
        if name.endswith(match_suffix):
            full_path = os.path.join(data_folder, name)
            file_list.append(full_path)

# 创建画布与共享X轴的子图
fig, axs = plt.subplots(
    nrows=subplot_grid[0],
    ncols=subplot_grid[1],
    sharex=True,
    figsize=(12, 8)
)
# 将二维子图数组展开为一维,方便循环索引
axs = axs.flatten()

# 逐文件读取数据并绘制到对应子图
for idx, path in enumerate(file_list):
    if idx >= len(axs):
        break
    time_data = []
    temp_data = []
    # 逐行读取数据,完全沿用原有读取逻辑
    with open(path, "r") as f:
        for line in f:
            split_content = line.split()
            time_data.append(float(split_content[0]))
            temp_data.append(float(split_content[7]))
    # 在对应子图上绘制温度曲线
    axs[idx].plot(time_data, temp_data)
    # 用文件名作为子图标题,标注不同模拟参数
    axs[idx].set_title(os.path.basename(path), fontsize=9)
    axs[idx].set_ylabel("全球温度")

# 统一设置最下方子图的X轴标签,设置全局X范围
axs[-1].set_xlabel("时间(年)")
plt.xlim(x_range)
# 自动调整子图间距,避免标签、标题重叠
plt.tight_layout()
plt.show()

注意事项:如果数据文件的列是由多空格/制表符分割的,现有split()方法会自动处理连续分割符,和原脚本中split(' ')的逻辑完全兼容;如果后续需要修改子图布局,仅需要调整配置区的subplot_grid参数即可,不需要改动核心代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 22:06:04