读取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
相关产品推荐
相关产品推荐

