Python中使用Pandas DataFrame绘制阈值以上数值报错求助
问题原因
你遇到的错误是因为plt.plot要求x轴和y轴数据长度完全一致,但你生成的lst1只包含9个Active=1对应的Time值,而x轴用的是全量的21453个Time数据,两者维度不匹配,所以触发报错。
解决方法
根据常见需求场景,给出两种可行方案:
场景1:在CH1曲线上标记Active=1的位置
如果是想在已绘制的CH1曲线基础上,标记出所有Active=1对应的时间点及CH1数值,用散点图更合适:
import matplotlib.pyplot as plt # 绘制CH1曲线 plt.plot(df_smooth['Time'], df_smooth['CH1']) # 筛选出Active=1的行数据 active_data = df_smooth[df_smooth['Active'] == 1] # 用红色散点标记这些点 plt.scatter(active_data['Time'], active_data['CH1'], color='red', label='Active=1') plt.legend() plt.xlabel('Time') plt.ylabel('CH1 Value') plt.show()
场景2:绘制与Time等长的Active状态曲线
如果需要绘制一条和Time长度一致的曲线,仅在Active=1的位置显示值(其余位置为空),可以用where方法生成等长数组:
import matplotlib.pyplot as plt import numpy as np # 生成与Time等长的数组:Active=1时保留1,其余设为NaN(绘图时会自动跳过空值) active_curve = df_smooth['Active'].where(df_smooth['Active'] == 1, other=np.nan) plt.plot(df_smooth['Time'], df_smooth['CH1'], label='CH1') # 用绿色圆点标记Active=1的位置,无连线 plt.plot(df_smooth['Time'], active_curve, marker='o', linestyle='', color='green', label='Active=1') plt.legend() plt.xlabel('Time') plt.show()
额外提示
避免用for循环遍历DataFrame,Pandas提供了布尔索引、where等高效方法,既能简化代码,又能提升大数据集的处理效率。
内容的提问来源于stack exchange,提问作者Hibah Mirza Chughtai
相关产品推荐
相关产品推荐

