如何在时间序列折线图中标注Isolation Forest检测的异常点?
实现时间序列折线图叠加异常红点标注的方法
当然可以实现这个需求!这在异常检测的结果可视化中非常实用,能直观地看到异常点在时间序列中的位置。下面我结合你用到的lineplot DataFrame和Isolation Forest的结果,给出具体的实现步骤和代码示例:
核心思路
先绘制正常的时间序列折线图,再在同一画布上叠加异常点的红色散点——只需要筛选出iso_forest == -1的行数据,用散点图绘制即可。
具体实现(以Matplotlib为例)
假设你已经导入了pandas和matplotlib.pyplot,直接用以下代码就能完成:
import pandas as pd import matplotlib.pyplot as plt # 1. 绘制基础时间序列折线图 plt.figure(figsize=(12, 6)) plt.plot(lineplot['Time_ms'], lineplot['BacksGas_Flow_sccm'], label='正常时序数据', color='blue') # 2. 筛选异常数据 anomalies = lineplot[lineplot['iso_forest'] == -1] # 3. 在折线图上叠加红色异常点散图 plt.scatter(anomalies['Time_ms'], anomalies['BacksGas_Flow_sccm'], color='red', marker='o', s=50, label='异常点') # 4. 添加图表美化元素 plt.xlabel('Time (ms)') plt.ylabel('BacksGas Flow (sccm)') plt.title('BacksGas Flow 时间序列及异常点标注') plt.legend() plt.grid(True, alpha=0.3) # 展示图表 plt.show()
用Seaborn实现的简化版本
如果你习惯用Seaborn,代码会更简洁:
import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(12, 6)) # 绘制折线图 sns.lineplot(data=lineplot, x='Time_ms', y='BacksGas_Flow_sccm', color='blue', label='正常时序数据') # 叠加异常点散点 sns.scatterplot(data=anomalies, x='Time_ms', y='BacksGas_Flow_sccm', color='red', marker='o', s=50, label='异常点') # 同样添加美化元素 plt.xlabel('Time (ms)') plt.ylabel('BacksGas Flow (sccm)') plt.title('BacksGas Flow 时间序列及异常点标注') plt.legend() plt.grid(True, alpha=0.3) plt.show()
小提示
- 可以调整
marker参数更换异常点的样式(比如用'^'三角形、'x'叉号),s参数调整点的大小,让异常点更醒目; - 如果你的时间序列数据量很大,建议先对数据做适当采样,避免图表过于拥挤;
- 要是需要保存图表,直接在
plt.show()之前加上plt.savefig('时序异常图.png', dpi=300)即可。
内容的提问来源于stack exchange,提问作者some_programmer
相关产品推荐
相关产品推荐

