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

如何为scipy.signal.find_peaks检测到的峰值标注对应数值?

plt.plot() 不支持直接传入数值作为点位标记,你写的plt.plot(peaks, x[peaks], x[peaks])不符合接口参数规则——第三个位置参数是用来指定线条、标记样式的格式字符串,传入数值数组会被解析为非法格式,自然达不到预期效果。
要实现峰值数值标注,用plt.text()接口即可,两种常见效果的实现方式如下:

效果1:用峰值数值直接替换原有圆点标记

不需要额外画圆点,直接在峰值坐标位置写入数值文本即可:

import matplotlib.pyplot as plt
import numpy as np
from scipy.misc import electrocardiogram
from scipy.signal import find_peaks

# 加载示例心电数据
x = electrocardiogram()[2000:4000]
peaks, _ = find_peaks(x, distance=150)

plt.plot(x)
# 遍历所有峰值点写入对应数值
for px, py in zip(peaks, x[peaks]):
    # ha/va设置文本水平、垂直居中对齐,和点位完全重合
    plt.text(px, py, f"{py:.2f}", ha="center", va="center", fontsize=9)
plt.show()

效果2:保留圆点标记,数值标注在点位附近

保留原有圆点标记,给数值加个坐标偏移,放在点的上方/侧方避免遮挡:

import matplotlib.pyplot as plt
import numpy as np
from scipy.misc import electrocardiogram
from scipy.signal import find_peaks

x = electrocardiogram()[2000:4000]
peaks, _ = find_peaks(x, distance=150)

plt.plot(x)
# 先绘制原有红色圆点标记
plt.plot(peaks, x[peaks], '.', color='crimson')
# 定义y轴偏移量,根据自己的数据范围调整大小避免重叠
y_bias = 0.12
for px, py in zip(peaks, x[peaks]):
    plt.text(px, py + y_bias, f"{py:.2f}", ha="center", fontsize=8, color='crimson')
plt.show()

自定义调整提示

  • 偏移量大小可以根据你自身数据的y轴取值范围灵活调整,避免标注文字和曲线、标记重叠
  • 可以通过plt.text()的fontsize、color、rotation参数自定义文字大小、颜色、旋转角度,适配高密度峰值的排版场景
  • 数值显示的精度可以通过f-string的格式化参数调整,比如要显示整数就用f"{py:.0f}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:42:16