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

如何基于数组长度生成时间轴并将Matplotlib图表1转换为图表2

问题与解决方案

1. 如何基于数组长度生成时间轴?

  • 若数据采样间隔为1秒/样本,直接基于数组长度生成连续整数即可,可简化原代码的循环写法:
    # 假设数据长度为1950,直接生成时间轴
    x = list(range(1950))
    # 用numpy实现更高效
    import numpy as np
    x = np.arange(1950)
    
  • 若有实际采样频率(例如fs=100Hz,即每秒采集100个样本),需生成对应真实时间轴:
    fs = 100  # 采样频率
    data_length = 1950
    # 生成从0到总时长的连续时间序列
    x = np.linspace(0, data_length / fs, data_length)
    

2. 将图表1转换为图表2的实现方案

图表1为单坐标轴同时展示真实值与预测值曲线;图表2分为上下两个子图,上方仅展示真实值曲线,下方展示预测值与真实值的残差(差值)曲线。修改后的代码如下:

import matplotlib.pyplot as plt
import numpy as np

# 假设out(真实值)和predictions(预测值)为已加载的数据集
colors=['red','green','brown','teal','gray','black','maroon','orange','purple']
colors2=['green','red','orange','black','maroon','teal','blue','gray','brown']
data_length = 1950
x = np.arange(data_length)  # 生成时间轴

for i in range(0,1):
    # 创建2行1列的子图布局,共享x轴
    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(15, 10), sharex=True)
    
    # 上方子图:绘制真实值曲线
    ax1.plot(x, out[0:data_length,i], color=colors[i])
    ax1.set_title('LSTM Regression (Training Data)')
    ax1.set_ylabel('Force/Fz (N)')
    ax1.legend(['Real value'], loc='upper right')
    
    # 下方子图:计算并绘制残差(预测值 - 真实值)
    residual = predictions[0:data_length,i] - out[0:data_length,i]
    ax2.plot(x, residual, color=colors2[i])
    ax2.set_ylabel('Residual (Predicted - Real)')
    ax2.set_xlabel('Time/s')
    ax2.legend(['Residual'], loc='upper right')
    
    # 自动调整子图间距,避免标签重叠
    plt.tight_layout()
    # 修正原代码的保存路径错误,生成合法文件名
    plt.savefig(f'Regression Result_{i}.png')
    plt.show()

关键修改说明:

  • 用plt.subplots(2, 1)创建上下布局的子图,sharex=True让两图共享x轴,提升可读性
  • 拆分原单图内容:上方子图仅展示真实值,下方子图聚焦残差分析
  • 调整画布尺寸为(15,10)适配上下布局,plt.tight_layout()自动优化子图间距
  • 修复原代码中plt.savefig的索引错误,用格式化字符串生成合法文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:10:27