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

读取CSV文件绘制正弦波图形异常,寻求技术解决方案

问题分析与修正方案

核心问题点

  • 绘图轴逻辑错误:当前代码用CSV第二列的x作为绘图x轴,而非生成的时间序列t,导致x轴不是时间维度,图形完全偏离预期。
  • CSV读取可能丢数据:若你的CSV第一行是原始数据而非列名,pd.read_csv会默认把它当作表头,导致后续取数少一行。
  • NaN处理冗余:手动查找并替换NaN的写法可以简化,用np.nan_to_num()更高效。
  • 正弦波公式逻辑存疑:ax = np.sin(2 * np.pi * t * x / sr)中,若x是CSV里的采样数据(比如传感器值),这个公式没有明确物理意义。需根据实际需求调整。

修正后的代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

sr = 2000         
ts = 1 / sr       
file_name = 'C:/Users/Desktop/test_data/sample_003.csv'

def x_sine():
    # 若CSV第一行是数据,添加header=None避免丢失首行数据
    sample = pd.read_csv(file_name, header=None)
    array = np.array(sample)
    # 一键替换所有NaN为0
    array = np.nan_to_num(array, nan=0)

    x = array[:, 1]
    # 生成对应每个采样点的时间序列
    t = np.arange(0, np.size(x)) * ts

    # 示例:假设x是频率值,生成对应正弦波;若要绘制x本身的波形,直接用x代替ax即可
    ax = np.sin(2 * np.pi * x * t)

    f = plt.figure()
    plt.title(f'Sine Wave Test - x-axis\n{file_name.split("/")[-1]}')

    # 用时间t作为x轴,正弦波振幅ax作为y轴
    plt.plot(t, ax)
    plt.xlabel('Time (s)')
    plt.ylabel('Amplitude')

    plt.show()

# 调用函数执行
x_sine()

额外说明

  • 如果你的需求是直接绘制CSV中x列的原始波形,删除正弦波计算行,直接用plt.plot(t, x)即可。
  • 如果x是用来控制正弦波的其他参数(比如振幅、相位),请调整ax的计算公式以匹配业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:45:28