Python绘制300秒正弦曲线出现振幅异常的原因及解决
问题分析与解决方案
原因分析
你遇到的振幅不一致问题,本质是两个因素导致的:
采样密度过低:当设置
linspace(0, 90*np.pi, 300)时,相当于在45个正弦周期里只取300个点,平均每个周期仅约6.7个采样点。这么少的点无法精准捕捉正弦曲线的峰值和谷值,折线连接后,视觉上会出现“振幅忽高忽低”的错觉——实际是折线顶点没对齐真实正弦曲线的极值点,并非正弦函数本身振幅变化。x轴含义混淆:你的目标是让x轴代表300秒时长,但当前代码里x轴是弧度值(0到90π≈282.74),和实际时间不匹配。这既不符合需求,也间接导致了采样点的时间间隔不合理。
修正方案
步骤1:明确时间与正弦曲线的映射
要让x轴为0-300秒,同时得到对应45个周期的正弦曲线(对应之前的90π弧度范围),需把时间转换为正确的弧度参数:
- 300秒对应45个周期,每秒的角频率为
(45 * 2π) / 300 = 0.3π - 正弦函数应为
sin(0.3π * t),其中t是时间(秒)
步骤2:增加采样点数量
把采样点从300提升到3000(或更多),保证每个周期有足够的点还原正弦曲线细节,避免视觉上的振幅偏差。
修正后的代码
import numpy as np import matplotlib.pyplot as plt # 生成0到300秒的时间数组,3000个采样点 time_array = np.linspace(0, 300, 3000) # 计算对应45个周期的正弦曲线 sin_array = np.sin(0.3 * np.pi * time_array) plt.plot(time_array, sin_array, color='red') plt.title("300秒时长的正弦曲线(45个周期)") plt.xlabel("时间(秒)") plt.ylabel("振幅") plt.show()
补充说明
如果只是想保持x轴为弧度,但解决振幅视觉问题,只需增加采样点数量即可,比如把linspace(0, 90*np.pi, 300)改成linspace(0, 90*np.pi, 3000),这样每个周期的采样点足够多,绘制出的曲线就会平滑且振幅一致。
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

