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

多文件TIME-X曲线同图绘制遇阻:字典方案失效,求简洁实现

问题分析与解决方案

原代码的核心问题

  • 循环逻辑混乱:遍历文件名后,data变量仅保留最后一个文件的数据,后续遍历时间列、数值列时,全部基于最后一个文件处理,导致数据不匹配且丢失前序文件的信息。
  • 绘图数据格式错误:my_dict["Time"]和my_dict["Value"]是Series对象的列表,直接传入plt.plot()无法被matplotlib正确解析,自然无法生成曲线。
  • 图例逻辑冗余:if Legend_Title == Legend_Title等价于判断参数不为None,写法冗余,且未给每条曲线指定图例标签。

修正后的简洁实现方案

以下代码支持任意数量文件,按指定列生成同图多曲线,逻辑清晰且避免数据丢失:

import pandas as pd
import matplotlib.pyplot as plt

def func(x):
    s1 = x % 100
    s2 = (x // 100) % 100
    s3 = x // 10000
    return s3 * 3600 + s2 * 60 + s1

def plot_multi_curves(file_names, time_headers, value_headers, 
                      x_label=None, y_label=None, title=None, legend_title=None):
    # 确保输入列表长度匹配
    if len(file_names) != len(time_headers) or len(file_names) != len(value_headers):
        raise ValueError("文件名列表、时间列头列表、数值列头列表长度必须一致")
    
    plt.figure(figsize=(10, 6))  # 可选:设置图大小
    
    for fname, time_col, val_col in zip(file_names, time_headers, value_headers):
        # 读取文件(sep="\s+"处理任意数量空格分隔,适配多数空格分隔的文本文件)
        data = pd.read_csv(fname, sep="\s+")
        # 转换时间格式
        time_data = data[time_col].map(func)
        # 获取数值数据
        val_data = data[val_col]
        # 绘制单条曲线,用文件名作为图例标签
        plt.plot(time_data, val_data, label=fname)
    
    # 设置图表属性
    if x_label:
        plt.xlabel(x_label)
    if y_label:
        plt.ylabel(y_label)
    if title:
        plt.title(title)
    # 添加图例,自动调整布局避免截断
    plt.legend(title=legend_title if legend_title else None, loc="upper right", bbox_to_anchor=(1.05, 1))
    plt.tight_layout()
    plt.show()

# 调用示例
plot_multi_curves(
    file_names=["PINA  50.199 263.960 20011121 GEODETIC nT17280", "ISLL  53.856 265.340 20011121 GEODETIC nT17280"],
    time_headers=["TIME", "TIME"],
    value_headers=["X", "X"],
    x_label="时间(秒)",
    y_label="X值",
    title="多文件曲线对比",
    legend_title="数据源文件"
)

关键优化点

  • 同步遍历输入:用zip()同时遍历文件名、时间列头、数值列头,确保每个文件对应正确的列,避免数据错位。
  • 逐文件即时绘图:读取一个文件就绘制对应曲线,无需额外字典存储,逻辑更简洁,内存占用更低。
  • 输入合法性校验:提前检查输入列表长度匹配性,快速定位参数错误。
  • 图表可读性优化:用plt.tight_layout()自动调整布局,避免图例被截断;用文件名作为曲线标签,直观区分数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:17:33